C语言-文件读写操作

C语言操作文件的函数是定义在stdio.h头文件中的一个结构体;
fileopen()函数用来打开一个文件如下代码:

FILF * fopen(char *filename, char*model);

打开方式有很多种如下所示:

  1. r 以只读方式打开文件,只允许读取,不允许写入,文件必须存在
  2. r+ 以读/写方式打开文件,允许读取和写入。该文件必须存在。
  3. rb+ 以读/写方式打开一个二进制文件,允许读/写数据。
  4. w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
  5. w+ 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  6. a以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
  7. a+ 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留。
  8. wb 以只写方式打开或新建一个二进制文件,只允许写数据。
  9. wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
  10. 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);

fprintffscanf

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()函数等等不常考,遇到一个积累一个。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值