gpt4 book ai didi

c - 如何在c中创建文件的精确副本

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:48 25 4
gpt4 key购买 nike

我想在 c 中创建一个文件 (.bmp) 的精确副本

#include<stdio.h>

int main()
{
FILE *str,*cptr;

if((str=fopen("org.bmp","rb"))==NULL)
{
fprintf(stderr,"Cannot read file\n");
//return 1;
}

if((cptr=fopen("copy.bmp","wb"))==NULL)
{
fprintf(stderr,"Cannot open output file\n");
//return 1;
}

fseek(str, 0, SEEK_END);
long size=ftell(str);
printf("Size of FILE : %.2f MB \n",(float)size/1024/1024);
char b[2];

for(int i=0;i<size;i++)
{
fread(b,1,1,str);
fwrite(b,1,1,cptr);
}

fseek(cptr, 0, SEEK_END);
long csize=ftell(str);
printf("Size of created FILE : %.2f MB \n",(float)csize/1024/1024);
fclose(str);
fclose(cptr);

return 0;
}

虽然它创建了一个相同大小的文件,但 Windows 在尝试查看新创建的位图副本时抛出错误。为什么会这样?

最佳答案

在开始读取文件之前,您已将输入文件的文件指针移动到文件末尾。您需要将其恢复到开头。

改变:

fseek(str, 0, SEEK_END);
long size=ftell(str);

到:

fseek(str, 0, SEEK_BEGIN);
long size=ftell(str);
fseek(str, 0, SEEK_SET);

请注意,您的代码没有错误检查 - 如果您至少检查了 fread 的结果,那么您的错误就会立即显现出来。重要信息:在错误检查方面不要偷工减料 - 它会在以后带来返回。

关于c - 如何在c中创建文件的精确副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com