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 };//用于存储文件中读取出的内容,要记住设置默认为\0
int 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()函数等等不常考,遇到一个积累一个。