在C中复制后,文件校验和不相同

时间:2013-11-14 14:08:55

标签: c

我编写了一个程序将一个文件复制到另一个文件但是在复制后它给了我不同的校验和而不是实际的校验和。

如果文件包含EOF or null字符,我想将一个文件复制到另一个文件然后我还需要将整个文件从一个文件复制到另一个文件(例如:zip文件,tar文件之类的那样)

#include<stdio.h>
    int main()
    {
        FILE *p, *q;
        char file1[20], file2[20];
        const int BUF_SIZE = 1024;
        unsigned char buf[BUF_SIZE];
        printf("\nEnter the source file name to be copied:");
        gets(file1);
        p = fopen(file1, "r");
        if (p == NULL )
        {
            printf("cannot open %s", file1);
            exit(0);
        }
        printf("\nEnter the destination file name:");
        gets(file2);
        q = fopen(file2, "w");
        if (q == NULL )
        {
            printf("cannot open %s", file2);
            exit(0);
        }

        fseek(p, 0, SEEK_END);
        unsigned int left_to_copy = ftell(p);

        while (left_to_copy > BUF_SIZE)
        {
            fread(buf, BUF_SIZE, 1, p);
            fwrite(buf, BUF_SIZE, 1, q);
            left_to_copy -= BUF_SIZE;
        }

        fread(buf, left_to_copy, 1, p);
        fwrite(buf, left_to_copy, 1, q);
        printf("\nCOMPLETED");
        fflush(p);
        fflush(q);
        fclose(p);
        fclose(q);
        return 0;
    }

我使用了上面的代码,但目标文件给了我不同的校验和意味着文件不像源一样复制。

由于

1 个答案:

答案 0 :(得分:2)

您应该使用二进制模式:使用"wb""rb"作为fopen()第二个参数。