文件操作

来源:互联网 发布:网络摄像机客户端 编辑:程序博客网 时间:2024/05/17 12:02

注意下面代码所产生的问题。

这一段是读文件,没有什么问题。

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void main(){char *p = "I:\\文件字符读写\\1.txt";FILE *pr = fopen(p,"r");if (pr == NULL){return;}while (!feof(pr)){char ch = fgetc(pr);putchar(ch);}system("pause");}
下面这段代码就有问题了,下面是一段复制文件的代码,查看文件也是没有问题的,但是从属性里可以看到,复制后的文件比原文件大了一个字节。这是由于下面这段代码引起的:
while (!feof(pr))  {char ch = fgetc(pr);<span></span>// 问题就出在这儿,当 fgetc(pr)读到最后 EOF 时,这时的ch =EOF ,而下面的代码:fputc(ch);把这个字字符写进了文件,所<span style="white-space:pre"></span>// 以多了一个字节fputc(ch, pw);}

void main(){char *namer = "I:\\文件字符读写\\1.txt";char *namew = "I:\\文件字符读写\\w.txt";FILE *pr = fopen(namer, "r");FILE *pw = fopen(namew, "w");if (pr == NULL){return;}while (!feof(pr))  {char ch = fgetc(pr);<span style="white-space:pre"></span>//问题就出在这儿,多写了个EOF。fputc(ch, pw);}fclose(pw);fclose(pr);system(namew);system("pause");}

上面的代码复制文件时会多个字节,如果在使用复制后文件再进行复制又会多个字节,反复这样使用就会使用文件变大。所以注意代码的细节。

可以改成这样:

<span style="white-space:pre"></span>char ch;while ((ch = fgetc(pfr)) != EOF){     fputc(ch, pfw);}
当读到 EOF,即文件末尾时结束文件复制。

0 0
原创粉丝点击