如何在c中复制二进制文件

时间:2016-05-06 20:03:29

标签: c file binary

大家好我想创建一个程序,将源文件(值)从源文件复制到目标文件。但我有一个错误,我不知道如何解决,我怎么能完成代码?

text_field_tag

1 个答案:

答案 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;
}