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; }