> 文章列表 > C语言文件操作

C语言文件操作

C语言文件操作

C语言文件操作

  • 基础函数
    • 打开和关闭文件
      • fopen()
      • fclose()
    • 顺序读写数据文件
      • fgetc()
      • fputc()
    • 示例
      • fgets()
      • fputs()
    • 示例
      • fprintf()
      • fscanf()

基础函数

打开和关闭文件

fopen()

fopen(文件名,使用文件方式)
使用文件方式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

若打开的是二进制文件,在其后方加入b即可。
如果打开失败,会返回NULL。

fclose()

fclose(文件指针)

如果成功关闭,则返回0,若关闭失败,返回EOF(-1)
用法

#include <stdio.h>
#include <stdlib.h>int main()
{FILE *fp;fp = fopen("test.txt","w+");fclose(fp);return 0;
}

顺序读写数据文件

fgetc()

fgetc(fp)

从fp指向的指针读取一个字符。每调用一次,fp后移一位。
读成功,返回所带的字符,失败则返回文件结束标志EOF(-1)

fputc()

fputc(ch,fp)

把字符ch写到文件fp指向的文件中。输出成功,返回该字符,否则返回EOF(-1)。

示例

示例1从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。

#include <stdio.h>
#include <stdlib.h>//从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。
int main()
{FILE *fp;if((fp = fopen("test.txt","w+")) == NULL){printf("打开失败\\n");exit(0);}char tmp;tmp = getchar();while(tmp!='#'){fputc(tmp,fp);tmp = getchar();}fclose(fp);return 0;
}

注意scanfgetchar的区别。
示例2
将一个文件中的信息复制到另一个文件中。

#include <stdio.h>
#include <stdlib.h>//将一个文件中的信息复制到另一个文件中。int main()
{FILE *fp1,*fp2;if((fp1 = fopen("test.txt","r")) == NULL){printf("文件1打开失败\\n");exit(0);}if((fp2 = fopen("test_copy.txt","w")) == NULL){printf("文件2打开失败\\n");exit(0);}char tmp;while((tmp = fgetc(fp1))!=EOF){fputc(tmp,fp2);//拷贝}//关闭文件fclose(fp1);fclose(fp2);return 0;
}

fgets()

从fp指向的文件中读取一个长度为n-1的字符串,存放到字符数组str中,如果读成功,返回地址str,失败则返回NULL。

fgets(str,n,fp)

fputs()

把str所指向的字符串写入到文件指针变量fp所指向的文件中。输出成功则返回0,否则返回非0值。

fputs(str,fp)

示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//从磁盘读入若干个字符串,对他们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。int main()
{FILE *fp1,*fp2;char str[10][10],tmp[10];int i=0,j,k,n = 10;fp1 = fopen("test.txt","r");/*for(i=0;i<n;i++){gets(str[i]);//输入字符串}*/while(fgets(str[i],10,fp1)!=NULL){i++;//puts(str[i++]);}//冒泡排序for(int i=0;i<n;i++){for(j = n-1;j>=i;j--){if(strcmp(str[i],str[j])>0){strcpy(tmp,str[i]);strcpy(str[i],str[j]);strcpy(str[j],tmp);}}}printf("\\nSort\\n");for(i=0;i<n;i++){puts(str[i]);//输入字符串}fp2 = fopen("test_copy.txt","w+");for(int i=0;i<10;i++){fputs(str[i],fp2);}return 0;
}

fprintf()

fprintf(文件指针,格式字符串,输出表列)

fscanf()

fscanf(文件指针,格式字符串,输入表列)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 10
typedef struct Student_type{char name[10];int num;int age;char addr[15];
}stdu1;
//从键盘读入10个学生的有关数据,然后把他们转存到磁盘文件上去。void save(){stdu1 stdu[3];FILE *fp;if(fp = fopen("stdu.txt","wb")==NULL){printf("打开失败\\n");}for(int i=0;i<1;i++){scanf("%s%d%d%s",stdu[i].name,&stdu[i].num,&stdu[i].age,stdu[i].addr);printf("输入成功:%s %d %d %s\\n",stdu[i].name,stdu[i].num,stdu[i].age,stdu[i].addr);
//dsa 23 54 fsdf}for(int i=0;i<1;i++){if(fwrite(&stdu[i],sizeof(struct Student_type),1,fp)!=1){printf("error");}}fclose(fp);
}
int main()
{save();return 0;
}