黑马程序员——C语言——文件读写
来源:互联网 发布:淘宝直播间怎么开 编辑:程序博客网 时间:2024/05/18 09:02
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 文件概念和分类
文件:存储在外部介质上数据的集合,这个数据集有一个名称叫做文件名。
文件分类
ASCII文件(文本文件):存放每一个字符对应的ASCII值,把ASCII值转换成二进制保存。
二进制文件:按二进制编码的方式存储文件。
文件操作步骤:
引入头文件(stdio.h)
定义文件指针
打开文件
文件读写
关闭文件
2. 文件的打开与关闭
在C语言中用一个指针变量指向一个文件
FILE *指针变量标示符 eg:FILE *fp;
文件的打开——fopen
FILE *fopen(文件名,文件打开方式);//打开成功,返回文件首地址,打开失败返回null
文件关闭函数——fclose
int fclose(文件指针变量); //有错返回非0,否则返回0
fputc(char ch,FILE *p); //将字符ch写入到fp指向的文件中
fgetc(FILE *p); //从fp指向的文件中读取一个字符
r:打开一个已经存在的文本文件,准备读取数据,不能写入数据
w:创建一个新文件,准备向里面写入数据,不能从文件读取数据,如果文件已经存在,则文件将会被覆盖
a:向文本文件尾追加数据,不能从文件中读取数据,如果文件不存在则创建文件
r+:打开一个已经存在的文件,准备读写
w+:创建一个新文件,向里面读写数据,如果文件已经存在则覆盖原文件
a+:向文本文件尾追加数据,可以从文件读取数据
t:打开一个文本文件
b:打开一个二进制文件
示例代码:
//从键盘输入一个字符串,写到文件中,再显示到屏幕上int main(int argc, const char * argv[]) { //定义一个文件指针 FILE *fp=NULL; //用读写方式打开文件 fp=fopen("eva.txt", "w+"); if (fp!=NULL) { printf("请输入要写入文件的字符串:"); //从键盘输入一个字符 char ch=getchar(); while (ch!='\n') { fputc(ch, fp); //继续从键盘输入字符 ch=getchar(); } }else{ printf("文件打开失败!"); } //把文件内部指针重新指向文件首地址 rewind(fp); //从文件中读取一个字符 char ch=fgetc(fp); //如果文件没有结束把读取的字符输出 while (ch!=EOF) { putchar(ch); //继续读取下一个字符 ch=fgetc(fp); } fclose(fp); return 0;}
字符串读写函数
fputs(字符串,指针); //把字符串写入到指针变量指向的文件中,返回值是写入的字符串的长度
fgets(char *buf,int n,FILE *fp); //从指针变量fp指向的文件中读取长度为n-1的字符串保存到起始地址为buf的内存空间中。
示例代码如下:
//从键盘输入一个字符串,写到文件中,再显示到屏幕上int main(int argc, const char * argv[]) { //定义一个文件指针 FILE *fp=NULL; //以读写方式打开文件 fp=fopen("sally.txt", "w+"); //判断文件是否打开成功 if (fp!=NULL) { char str[100]; printf("请输入要保存的字符串:"); //从键盘输入一个字符串 scanf("%s",str); //把输入的字符串保存到文件中 fputs(str, fp); }else{ printf("文件打开失败!"); } //把文件内部指针重新指向文件首地址 rewind(fp); char str1[100]; //从文件中读取出内容保存到字符数组中 fgets(str1, sizeof(str1), fp); puts(str1); fclose(fp); return 0;}注意:fgets从文件中读取字符串时遇到\n读取结束
数据块读取函数:
int fread(char *pt,unsigned size,unsigned n,FILE *fp); //从fp指定的文件中读取n个长度为size的数据项,保存到pt指向的内存区
int fwrite(char *ptr,unsigned size,unsigned n,FILE *fp); //把ptr所指向的n*size个字节写入到fp指向的文件中
示例代码如下:
/** 从键盘输入两个学生数据,写入一个文件中,再读取这两个学生的数据显示到屏幕上 */#include <stdio.h>#define LEN 100//定义一个结构体typedef struct Student{ char name[LEN]; int age; int score;}MyStu;int main(int argc, const char * argv[]) { MyStu stuent[2]; //从键盘输入学生信息 for (int i=0; i<2; i++) { printf("请输入第%d个学生的姓名:",i+1); scanf("%s",stuent[i].name); printf("\n请输入第%d个学生的年龄:",i+1); scanf("%d",&stuent[i].age); printf("\n请输入第%d个学生的成绩:",i+1); scanf("%d",&stuent[i].score); } //定义一个文件指针并打开文件 FILE *fp=fopen("a.txt", "w+"); if (fp!=NULL) { //把学生信息写到文件中 for (int i=0; i<2; i++) { fwrite(&stuent[i], sizeof(MyStu), 1, fp); } } //把文件内部指针重新指向文件首地址 rewind(fp); //定义一个结构体数组 MyStu stu[2]; for (int i=0; i<2; i++) { //把从文件中读取出的信息保存到结构体中 fread(&stu[i], sizeof(MyStu), 1, fp); printf("\n第一个学生信息是:%s\t%d\t%d\t",stu[i].name,stu[i].age,stu[i].score); } //关闭文件 fclose(fp); return 0;}
格式化读写函数
fscanf(文件指针,格式字符串,输入列表);//按指定格式把数据从文件中读出
fprint(文件指针,格式字符串,输出列表); //按指定格式把数据写入文件
示例代码如下:
/** *使用fprintf和fscanf向文件中写入一个二维数组,并读取出来 */#include <stdio.h>int main(int argc, const char * argv[]) { int a[3][3]={1,2,3,4,5,6,7,8,9}; //定义一个文件指针并打开 FILE *fp=fopen("fprintf.txt", "w+"); //判断文件是否打开成功 if (fp!=NULL) { for (int i=0; i<3; i++) { fprintf(fp, "%d,%d,%d#",a[i][0],a[i][1],a[i][2]); } } //把文件内部指针移到文件首 rewind(fp); //定义一个数组接收从文件中读取的数据 int b[3][3]; for (int i=0; i<3; i++) { fscanf(fp, "%d,%d,%d#",&b[i][0],&b[i][1],&b[i][2]); } //打印出二维数组中的数据 for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { printf("%d\t",b[i][j]); } } return 0;}
- 黑马程序员——C语言——文件读写
- 黑马程序员——C语言基础——文件读写实战
- 黑马程序员-------C语言----文件读写
- 黑马程序员——c语言基础:文件管理
- 黑马程序员——C语言指针
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员—C语言—从零开始
- 黑马程序员—C语言—指针
- 黑马程序员——C语言数组
- 黑马程序员——C语言指针
- 黑马程序员——C语言指针
- 黑马程序员——C语言基础
- 黑马程序员——C语言总结
- 黑马程序员——C语言概述
- 黑马程序员——C语言数组
- 黑马程序员——C语言指针
- 黑马程序员——C语言
- 正则表达式
- 网上比较好的机器学习技术文章
- 表单提交数据量大于2m,java 后台接受不到表单传递过来的数据
- dubbo博文
- Esper企业版介绍(一)Esper HA
- 黑马程序员——C语言——文件读写
- 编程结构体总结
- JAVA中常见的几种RuntimeException
- openwrt 3G上网功能配置(联通版本)
- 非递归方式处理无限极菜单
- [持续更新]Android开发工具的各宗疑难杂症
- JS隔行变色
- Charles :Mac下的截包工具
- Android实用的任务管理器—tractor