C语言基本文件编程操作(读写)

网友投稿 981 2022-05-28

一、文件编程介绍

文件编程也是C语言里重要的一个知识点,在电脑上编程肯定是需要与文件、磁盘打交道的。

C语言标准库里提供了文件编程接口,我们不需要理解磁盘原理、磁盘驱动、直接调用C语言提供的接口函数就可以读写磁盘上的文件,非常方便。

一般的文件操作流程就是: 打开文件----读写文件-----关闭文件。

对应起来就是4个函数: fopen fread/fwrite fclose

C语言基本文件编程操作(读写)

下面就介绍如何使用这4个函数完成基本的文件操作。

在嵌入式开发、单片机开发里,也有很多现成的文件系统,提供的函数和C语言标准函数大同小异,操作流程没什么区别。

二、文件接口函数介绍

2.1 打开、读、写、关闭函数原型

这4个函数是最基本的函数,只用这4个已经可以完成大部分文件编程需求了。

#include //打开文件 FILE *fopen(const char *path, const char *mode); //读文件 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //写文件 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); //关闭文件 int fclose(FILE *fp);

2.2 写函数的基本运用

下面的示例代码演示了如何向文件追加写数据。

#include #include #include int main() { FILE *file; int cnt; /*1. 打开文件*/ file=fopen("D:/123.txt","a+b"); if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 写数据*/ cnt=fwrite("1234567890",1,10,file); /*3. 关闭文件*/ fclose(file); printf("cnt=%d\n",cnt); return 0; }

2.3 读函数基本运用

打开指定文件,读取100字节内容打印出来。

#include #include #include int main() { FILE *file; int cnt; char buff[100]; /*1. 打开文件*/ file=fopen("D:/123.txt","rb"); //malloc if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 写数据*/ cnt=fread(buff,1,100,file); /*3. 关闭文件*/ fclose(file); //free buff[cnt]='\0'; printf("%s\n",buff); printf("cnt=%d\n",cnt); return 0; }

2.4 文件指针位置偏移 (自动向后偏移)

对文件读写时,文件内部有一个文件指针记录当前文件读写的位置,可以理解为在电脑上编辑代码文档时看到的光标一样,读写时会自动偏移。

int main() { FILE *file; int cnt; char data; /*1. 打开文件*/ file=fopen("D:/123.txt","rb"); //malloc if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 读数据---验证文件指针是否可否自动向后偏移*/ cnt=fread(&data,1,1,file); printf("data=%c\n",data); cnt=fread(&data,1,1,file); printf("data=%c\n",data); cnt=fread(&data,1,1,file); printf("data=%c\n",data); cnt=fread(&data,1,1,file); printf("data=%c\n",data); cnt=fread(&data,1,1,file); printf("data=%c\n",data); /*3. 关闭文件*/ fclose(file); //free return 0; }

2.5 设置文件指针位置

如果想要从指定位置读取文件,可以调用fseek函数定位文件指针的位置。

#include #include #include int main() { FILE *file; int cnt; char data; /*1. 打开文件*/ file=fopen("D:/123.txt","rb"); //malloc if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 偏移文件指针*/ fseek(file,5,SEEK_SET); /*3. 读数据---验证文件指针是否可否自动向后偏移*/ cnt=fread(&data,1,1,file); printf("data=%c\n",data); /*4. 关闭文件*/ fclose(file); //free return 0; }

2.6 判断文件读取完毕

如果要读取全部文件内容,肯定需要知道文件什么 时候读取完毕。最常见的判断方法就是判断read函数的返回值,是否与想要读取的字节数相等,不相等要么读取完毕了要么就是失败了。

#include #include #include int main() { FILE *file; int cnt; char data; /*1. 打开文件*/ file=fopen("D:/123.txt","rb"); //malloc if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 偏移文件指针*/ fseek(file,5,SEEK_SET); /*3. 读数据---验证文件指针是否可否自动向后偏移*/ while(1) { cnt=fread(&data,1,1,file); if(cnt!=1)break; printf("data=%c\n",data); } /*4. 关闭文件*/ fclose(file); //free return 0; }

2.7 使用文件操作函数读写结构体数据

文件是一个存储数据的空间,不仅仅可以存储文本数据,也可以存储我们指定的二进制数据。

向文件里写入数据之后,只要自己知道格式,读取的时候按照约定的格式读取出来解析就行。

比如: 软件每次启动时,可以读取上次保存的配置文件。

//写结构体数据 #include #include #include struct MyStruct { int a; int b; char c[100]; }; int main() { FILE *file; int cnt; struct MyStruct stu={666,888,"C语言文件操作学习"}; /*1. 打开文件*/ file=fopen("D:/123.txt","wb"); if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 读数据*/ cnt=fwrite(&stu,1,sizeof(struct MyStruct),file); printf("cnt=%d\n",cnt); /*3. 关闭文件*/ fclose(file); //free return 0; } //读结构体数据 #include #include #include struct MyStruct { int a; int b; char c[100]; }; int main() { FILE *file; int cnt; struct MyStruct stu; /*1. 打开文件*/ file=fopen("D:/123.txt","rb"); if(file==NULL) { printf("文件打开失败!\n"); return -1; } /*2. 读数据*/ cnt=fread(&stu,1,sizeof(struct MyStruct),file); printf("cnt=%d\n",cnt); printf("%d,%d,%s\n",stu.a,stu.b,stu.c); /*3. 关闭文件*/ fclose(file); //free return 0; }

C 语言

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ftell函数和rwind函数详解
下一篇:穷举搜索:回溯与深搜
相关文章