出问题的原因是你ftell得到的长度和你fread实际读到的字节数不符,原因是windows把回车看作/r/n2个字符,ftell读的时候也按2个算,但是fread读的时候却算一个,就是\n ,这就导致你fwrite的时候比你fread到的要多。
解决办法就是你可以定义一个额外的整数n来记录读到的字符数,并把下面2句改成这样:
/*把文件拷贝到buffer中*/
n=fread(buffer,1,lSize,pFile);
/*写入新文件中*/
fwrite(buffer,1,n,newFile);
你可以先不改然后把测试文件内容删到只剩下一行,就不会出这个问题
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:
#include
int a;
char b,c[100];
int main(){
FILE * fp1 = fopen("input.txt", "r");//打开输入文件
FILE * fp2 = fopen("output.txt", "w");//打开输出文件
if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
puts("不能打开文件!");
return 0;
}
fscanf(fp1,"%d",&a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串
printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
fputs(c,fp2);//向输出文件写入一行字符串
fputc(b,fp2);//向输出文件写入一个字符
fprintf(fp2,"%d",a);//向输出文件写入一个整数
fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return 0;
}
fread() 和 fwrite() 用于2进制文件读写。
也就是说,你打开文件时,无论读还是写 要有选项 b, 例如 "rb","wb".
文本文件,按2进制方式打开,就会按2进制方法处理。
改正你的 fopen 里的 选项,就可解决问题。
应该是在 fread之后 fwrite之前加上一句话 buffer[ISize] = '\0';
出现 屯 的原因,是没找到结束符.
buffer = (char*)malloc(sizeof(char)*( lSize +1)); //修改这一句
ZeroMemory(buffer ,sizeof(char)*( lSize +1)); //紧随其后加入这一句
试试看!!