fread、fwrite 一次读写一块

fread、fwrite两个函数一般用于操作二进制文件,不适用处理文本文件,当然如果你非要用这两个函数来处理也没什么问题,只不过会相对麻烦一些,比如它不会给你读取出来的字符串末尾添加\0(fgets会在传入的buf末尾增加\0),也不会有什么结束标记判断。所以如果你如果用fread处理文本文件是非常苦恼的一件事情,一不小心就可能出错。

使用fread、fwrite函数复制一份文本文件。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
	FILE* pReadFile = fopen("File.txt", "r");
	if (NULL == pReadFile) return -1;
	FILE* pWriteFile = fopen("FileNew.txt", "w");
	if (NULL == pWriteFile)
	{
		fclose(pReadFile);
		return -1;
	}

	char* read[100] = {0};
	int count = 0;
	while ((count = fread(read, 1, 100, pReadFile)) > 0 /*>0证明没有到文件末尾*/)
	{
		// count返回值是读取到了多少个字节的内容
		// 一个字节一个字节的读,不会丢弃任何一个字符
		printf("读取到了 %d 个字节 \n", count);
		// 写入到新文件中,一次写一个字节,写count次
		fwrite(read, 1, count, pWriteFile);
		// 写入到新文件中,一次写count个字节,写1次
		// fwrite(read, count, 1, pWriteFile);
	}
	putchar(10);
	// 将文件指针指向起始
	rewind(pReadFile);
	while ((count = fread(read, 100, 1, pReadFile)) > 0)
	{
		// 当读到最后一次时,fread发现读取的内容不满100个字节,会将其无情的丢弃
		// 所以这样读取出来的内容会有差异
		printf("读取到了 %d 个字节 \n", count);
	}

	fclose(pReadFile);
	fclose(pWriteFile);
	system("pause");
	return 0;
}

发表评论