e4f22f19ec401f551e61931ece206571.png

c语言对文件的操作主要分为:按字符操作,按行操作,按内存块操作

主要的函数:

fopen():

  FILE * fopen(_In_z_ const char * _Filename, _In_z_ const char * _Mode);

第一个参数是文件的绝对路径名(包含文件),第二个是文件的打开方式,Mode(方式)意义如下:


"r" 打开一个用于读取的文本文件

"w" 创建一个用于写入的文本文件

"a" 附加到一个文本文件

"rb" 打开一个用于读取的二进制文件

"wb" 创建一个用于写入的二进制文件

"ab" 附加到一个二进制文件

"r+" 打开一个用于读/写的文本文件

"w+" 创建一个用于读/写的文本文件

"a+" 打开一个用于读/写的文本文件

"rb+" 打开一个用于读/写的二进制文件

"wb+" 创建一个用于读/写的二进制文件

"ab+" 打开一个用于读/写的二进制文件

fclose():关闭文件资源

一、按字符:其实就是从文件中一个个读出字符出来

头文件:

#include#include#include

函数原型:

voidwriteFile(char*fileRealName,char*writeStr);//将一个字符串写入某个文件中

void readFile(char *fileRealName); //读取文件

实现方法:

voidreadFile(char*fileRealName){

FILE *pf = NULL;

pf = fopen(fileRealName,"r+");

if(pf == NULL){

printf("文件不存在");

return;

}

while(!feof(pf)){

printf("%c", fgetc(pf));

}

fclose(pf);

}

测试写入文件:

int main(){

writeFile("c:/1.txt","fdweqfefwef");

system("pause");

return0;

}

运行结果:

19cdffd14be412d10b7e1ce1d589ca71.png

测试读取文件:

int main(){

readFile("c:/1.txt");

system("pause");

return0;

}

运行结果:

f5d03bbcf1c2d76e27dabf9cedff740c.png

二、按行操作:

头文件跟上面一样

函数原型:

voidreadLine(constchar*fileRealName); // 读取一行

voidwriteLine(constchar*fileRealName,constchar*writeLine); 写入一行

实现方法:


voidreadLine(constchar*fileRealName){

FILE *pf = NULL;

charrl[1024];

char*p = NULL;

pf = fopen(fileRealName,"r+");

if(pf == NULL){

printf("文件不存在");

return;

}

while(!feof(pf)){

p = fgets(rl,1024, pf);

if(p == NULL)

goto end;

printf("%s", rl);

}

end :

fclose(pf);

}

voidwriteLine(constchar*fileRealName,constchar*writeLine){

FILE *pf = NULL;

pf = fopen(fileRealName,"r+");

if(pf == NULL){

printf("文件不存在");

return;

}

fputs(writeLine, pf);

fclose(pf);

}


写入测试就不做了,跟字符操作一样

读取测试:

文本文档为:

ggg

3456

zhang

张三

李四

int main(){

readLine("c:/1.txt");

system("pause");

return0;

}

运行结果:

00c641a8ca79fb4ceba6defaf07e2ce2.png

三、按照内存块操作:

头文件一样,全局变量:

typedefstruct Teacher{

int id;

charname[64];

}Teacher;

函数原型:

aed1073b4c250a3ca82f799b48733bdf.png

实现方法:

90d7aceafdc72a2a136d31cc78c4e7b7.png

12775469bba087aa60e8b98ef820b92a.png

测试写:

int main(){

Teacher ts[3];

int i;

for(i =0; i <3; i++){

ts[i].id =1000+ i;

sprintf(ts[i].name, "zhangsan%d", i +1);

}

writeTeachers(ts, 3,"c:/2.data");

system("pause");

return0;

}

最终生成一个二进制文件

测试读:

int main(){

Teacher *ts = NULL;

intlen =0;

len = readTeachers(&ts,"c:/2.data");

printTeacher(ts, len);

if(ts != NULL){

free(ts);

ts = NULL;

}

system("pause");

return0;

}

运行结果:

1085c6da01c41607ca9b3a8d63656ee7.png


“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++爱好者就在我这里,。这里是编程爱好者的聚集地,欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”

关注我,带你遨游代码的世界!

C/C++进阶之路​zhuanlan.zhihu.com
9577f23d4622ca389cdd6c296147a522.png

最后分享一张C/C++学习路线图给爱学习的小伙伴们

1a198c90a23e12efc8e7a39aa3b64411.png
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐