C语言文件操作
文件操作基本流程:
•打开:fopen
•关闭:fclose
fopen函数原型:FILE *fopen(const char *filename, const char *mode)
fopen函数打开filename指定的文件, 并返回一个与之相关联的流。 如果打开操作失败,则返回 NULL
访问模式mode可以为下列合法值之一:
"r" 打开文本文件用于读
"w" 创建文本文件用于写, 并清空原有内容
"a" 追加, 打开或创建文本文件,并向文件末尾追加内容
"r+" 打开文本文件用于更新(即读和写)
"w+" 创建文本文件用于更新,并清空原有内容
"a+" 追加, 打开或创建文本文件用于更新, 写文件时追加到文件末尾
ps:如果在上述访问模式之后加上 b , 如 "rb" 或 "w+b" 等,则表示对二进制文件进行操作
fclose函数原型:int fclose(FILE *fp)
fclose函数的功能是关闭 fp 指向的文件 正常关闭返回0, 出错时返回非0
文件操作结束不关闭文件可能丢失数据!
•fseek() 函数
fseek()函数在打开的文件中定位。
该函数把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量。
fseek(file,offset,whence)
- offset 规定新的位置(从文件头开始以字节数度量)
- whence
SEEK_SET - 设定位置等于 offset。默认SEEK_CUR - 设定位置为当前位置加上 offset。
SEEK_END - 设定位置为文件末尾(EOF)加上 offset
要移动到文件末尾之前的位置,offset 必须是一个负值
•代码示例
View Code1 #include <stdio.h> 2 #include<string.h> 3 int main() 4 { 5 ///追写 不清空的写 6 char name[80],pas[80]; 7 FILE *fp=fopen("user.txt","a+");///以追写模式("a+")打开文件user.txt,如果不存在,会自动创建 8 scanf("%s%s",name,pas); 9 fprintf(fp,"%s %s\n",name,pas);///将名称和密码以字符串形式写入文件 10 fclose(fp);///关闭文件 11 12 ///读(显示) 13 FILE *fpp=fopen("user.txt","r");///以读模式("r")打开文件user.txt 14 while(fscanf(fpp,"%s%s",name,pas)!=EOF) 15 printf("%s %s\n",name,pas); 16 fclose(fpp); ///关闭文件 17 18 ///修改 19 char rename[80],repas[80]; 20 scanf("%s%s",name,pas); 21 FILE *fppp = fopen("user.txt","r+"); 22 while(fscanf(fppp,"%s%s",rename,repas)!=EOF) 23 { 24 if(strcmp(rename,name)==0 && strcmp(pas,repas)==0) 25 { 26 int len=strlen(repas); 27 fseek(fppp,-len,SEEK_CUR);///从此位置后退len个开始写入 即覆盖更新pas 28 printf("please input new pas:"); 29 scanf("%s",repas); 30 fprintf(fppp,"%s",repas); 31 break; 32 } 33 } 34 fclose(fppp); 35 36 ///读(显示) 37 FILE *fpppp=fopen("user.txt","r"); 38 while(fscanf(fpppp,"%s%s",name,pas)!=EOF) 39 printf("%s %s\n",name,pas); 40 fclose(fpppp); 41 }