C语言操作文件的函数是定义在stdio.h头文件中的一个结构体;
fileopen()函数用来打开一个文件如下代码:
FILF * fopen(char *filename, char*model);
打开方式有很多种如下所示:
- r 以只读方式打开文件,只允许读取,不允许写入,文件必须存在
- r+ 以读/写方式打开文件,允许读取和写入。该文件必须存在。
- rb+ 以读/写方式打开一个二进制文件,允许读/写数据。
- w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
- w+ 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
- a以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- a+ 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留。
- wb 以只写方式打开或新建一个二进制文件,只允许写数据。
- wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
- ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
注意点
文件打开方式由r、w、a、b、+ 六个字符拼成,各字符的含义是:
r(read):读
w(write):写
a(append):追加
b(banary):二进制文件
+:读和写
DEMO
//读取文件01.txt
FILE* pFile = fopen("01.txt", "r");
二进制模式
//rb,wb,ab
//读取文件01.txt
FILE* pFile = fopen("01.txt", "rb");
写入文件,fwrite
FILE* pFile = fopen("01.txt", "w");char* str = "C语言";//fwrite的返回值,0写入失败 , 成功返回字符个数*字符大小int a = fwrite(str, sizeof(char), strlen(str), pFile);fclose(pFile);//关闭文件并保存
注:FILE* pFile = fopen(“01.txt”, “w”);//会将文件内容清空
当要读文件时,不可以w,会清空文件内容
读取文件,fread
//读多个字符
//读文件,r或a 不可以w,会清空文件内容FILE* pFile = fopen("03.txt", "r");char str[20] = { 0 };//用于存储文件中读取出的内容,要记住设置默认为\0//fread 返回值 每次读取字符后,整体长度变小//文件中没有字符,返回0//文件中有字符,且读取字符个数无论是否大于文件中总的字符个数,都返回读取字符个数int n = fread(str, sizeof(char), 2, pFile);//文件中的内容存储的字符数组str中,2表示每次读取文件的字符个数
读取文件,fread
//文件所有内容
FILE* pFile = fopen("03.txt", "r");char str[20] = { 0 };//用于存储文件中读取出的内容,要记住设置默认为\0int a;while ( a = fread(str, sizeof(char), 1, pFile) )//文件内容为空时,a = 0{printf("%s", str);}fclose(pFile);
结构体操作
struct node{int num;char name[15];double height;int age;};int main(void){//结构体写入文件struct node n = { 123, "jkl", 178.2, 22 };//printf("%d\t%s\t%lf\t%d", n.num, n.name, n.height, n.age);FILE* pFile = fopen("05.txt", "r");//fwrite(&n, sizeof(n), 1, pFile);struct node n2;fread(&n2, sizeof(n2), 1, pFile);printf("%d\t%s\t%lf\t%d", n2.num, n2.name, n2.height, n2.age);fclose(pFile);}
fgets读取文件一行和fputs写入文件一行
//fputs写入文件一行FILE* pFile = fopen("06.txt", "w");fputs("Hello\n", pFile);fputs("World", pFile);fclose(pFile);//fgets读取文件一行FILE* pFile2 = fopen("06.txt", "r");char str[10] = { 0 };fgets(str, 10, pFile2);fgets(str, 10, pFile2);fclose(pFile2);
fprintf和fscanf
fscanf(可以从一个文件流中格式化读出数据,遇到空格或回车就停止)
fprintf(可以向一个文件中格式化写入数据)
FILE* pfile = fopen("07.txt", "r");//fprintf按照某种格式写入文件,读取时也按照某种格式fprintf(pfile,“%d %d”,123456,789);//将123456和789写到test.txt文件中fprintf(pfile,"%s %s","China","ChongQing"); //将字符串China和ChongQing追加写到test.txt文件中int n = 0;char str[20] = { 0 };double d = 0.0;fscanf(pfile, "%d %s %lf", &n, &str, &d);fclose(pfile);
看这个:完结散花!
#include<stdio.h>
#define TXT_FILE "/Users/dianju/Desktop/位图测试修改/CTest/CTest/文本文件.text"
int main(){FILE *fp;char ch;//文件以追加的方式打开,并判断是否成功if( (fp=fopen(TXT_FILE,"a+")) == NULL ){printf("Cannot open file, press any key to exit!\n");exit(1);}printf("Input a string:\n");//每次从键盘读取一个字符并写入文件while ( (ch=getchar()) != '\n' ){fputc(ch,fp);}fclose(fp);return 0;
}
ps:还有那些feek() frewind()函数等等不常考,遇到一个积累一个。