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;
}
注意scanf
和getchar
的区别。
示例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;
}