C语言-文件读写操作

文本模式
//r 只读
//w 删除原有内容,重写入 文件不存在,还可以创建文件
//a 在原有内容后接着写 文件不存在,还可以创建文件
//r+ 可读可写 删除原有内容,重写入
//w+
//a+

//读取文件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(str, sizeof(char), strlen(str)+1, pFile);
	
	//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), 2, pFile) )//文件内容为空时,a = 0
	{
	printf("%s", str);
	}
	fclose(pFile);

文件内容为:
在这里插入图片描述
结果如下:
在这里插入图片描述
明显出现错误,我们是2个字符的读取,最后剩下一个字符了,只更新了一个,str[1]还是上一次循环的值,解决方法,在循环后加上这两句

	str[0] = '\0';
	str[1] = '\0';

最后结果为:
在这里插入图片描述
文本模式和二进制模式行结尾的不同

	FILE* pFile = fopen("04.txt", "rb");
	char str[20] = { 0 };
	//行结尾的不同
	//文本模式读出一个字符\n
	//二进制模式读出两个字符\r\n

	while (!feof(pFile))//判断文件是否到结尾了  到结尾返回1,没到结尾返回0
	{
		int a = fread(str, sizeof(char), 20, pFile);
		printf(str);
		str[0] = 0;
		str[1] = 0;
	}

	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
//按照某种格式写入文件,读取时也按照某种格式

	FILE* pfile = fopen("07.txt", "r");
	//按照某种格式写入文件,读取时也按照某种格式
	//fprintf(pfile, "%d %s %lf", 23, "jk", 8.42);
	int n = 0;
	char str[20] = { 0 };
	double d = 0.0;
	fscanf(pfile, "%d %s %lf", &n, &str, &d);

	fclose(pfile);

猜你喜欢

转载自blog.csdn.net/weixin_43340991/article/details/86582738