大家好我想创建一个程序,将源文件(值)从源文件复制到目标文件。但我有一个错误,我不知道如何解决,我怎么能完成代码?
text_field_tag
答案 0 :(得分:1)
首先,你不会两次打开源文件。只需从代码中删除第一个或第二个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;
}