大家好,我正在尝试制作一个程序,将二进制文件(值)从源复制到目标。但我有一个错误,我不知道如何解决这个问题,我该如何完成代码?
int main(int argc, char ** argv)
{
FILE * source, *target;
int numr, numw;
char buffer[100];
source = fopen(argv[1], "rb");
target = fopen(argv[2], "rb");
if ((source = fopen(argv[1], "rb")) == NULL)
{
printf("open read file error.\n");
return 0;
}
while (feof(source) == 0)
{
if ((numr = fread(buffer, 1, 100, source)) != 100)
{
if (ferror(target) != 0)
{
printf("read file error.\n");
return 0;
}
}
fwrite(buffer, 1, numr, target);
if ((numw = fwrite(buffer, 1, numr, target)) != numr)
{
printf("write file error.\n");
return 0;
}
}
fclose(source);
fclose(target);
return 0;
}
最佳答案
首先,您不会两次打开源文件。只需从代码中删除第一个或第二个 fopen 即可。
source = fopen(argv[1], "rb");
if (source == NULL)
{
printf("open read file error.\n");
return 0;
}
还必须使用“w”打开目标文件并检查其是否成功。
target = fopen(argv[2], "a+w");
if (target == NULL)
{
fclose(source);
printf("open target file error.\n");
return 0;
}
而且你不需要检查 fread 是否返回 100,如果有问题,ferror() 会为你检测错误。
numr = fread(buffer, 1, 100, source);
if (ferror(target) != 0)
{
printf("read file error.\n");
break;
}
此外,您必须使用一次写入功能
numw = fwrite(buffer, sizeof(char), numr, target);
if (numw != numr)
{
printf("write file error.\n");
break;
}
我编辑了你的代码,现在它工作正常......
int main(int argc, char ** argv)
{
FILE *source, *target;
int numr, numw;
char buffer[101];
source = fopen(argv[1], "rb");
if (source == NULL)
{
printf("open read file error.\n");
return 0;
}
target = fopen(argv[2], "a+w");
if (target == NULL)
{
fclose(source);
printf("open target file error.\n");
return 0;
}
while (feof(source) == 0)
{
memset(buffer, 0, sizeof(buffer));
numr = fread(buffer, 1, 100, source);
if (ferror(target) != 0)
{
printf("read file error.\n");
break;
}
numw = fwrite(buffer, sizeof(char), numr, target);
if (numw != numr)
{
printf("write file error.\n");
break;
}
}
fclose(source);
fclose(target);
return 0;
}
关于c - 如何在c中复制二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080537/