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;
}
运行结果:
测试读取文件:
int main(){
readFile("c:/1.txt");
system("pause");
return0;
}
运行结果:
二、按行操作:
头文件跟上面一样
函数原型:
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;
}
运行结果:
三、按照内存块操作:
头文件一样,全局变量:
typedefstruct Teacher{
int id;
charname[64];
}Teacher;
函数原型:
实现方法:
测试写:
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;
}
运行结果:
“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++爱好者就在我这里(<C语言C++编程学习14>)。这里是编程爱好者的聚集地,欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”
关注我,带你遨游代码的世界!