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 必须是一个负值

 

•代码示例

 1 #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 }
View Code

 

posted @ 2019-08-27 21:37  MMinoz  阅读(223)  评论(0编辑  收藏  举报