fread、fwrite 一次读写一块

2023-10-20 16:12:59 浏览数 (1)

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

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

代码语言:javascript复制
#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;
}

0 人点赞