fread()返回不正确的数据

时间:2016-11-10 07:27:29

标签: c visual-studio-2013 fread

我试图以256字节的块读取128KB二进制文件。 256字节的前20-40个字节似乎总是正确的。但是之后数据被破坏了。我尝试读取文件并将其写入另一个二进制文件并进行比较。超过一半的数据已损坏。这是我的代码

uint8_t buffer[256]
read_bin_file = fopen("vtest.bin", "r");
if (read_bin_file == NULL)
{
    printf("Unable to open file\n");
    return false;
}

test_bin = fopen("test_file.bin", "w");
if (test_file == NULL)
{
    printf("Unable to open file\n");
    return false;
}

fflush(stdout);

for (i = 0; i <=0x1FF; i++)
{
    file_Read_pointer = i * 256;
    fseek(read_bin_file, file_Read_pointer, SEEK_SET);
    fread(buffer, 256, 1, read_bin_file);
    fseek(test_file, file_Read_pointer, SEEK_SET);
    fwrite(buffer, 256, 1, test_file);

}

我错过了什么? 此外,当我尝试将读取的字节从256增加到1024(i <0x7F)时,错误似乎显着减少。该文件几乎是90%匹配

1 个答案:

答案 0 :(得分:4)

如果是您正在读写的二进制数据,那么您应该使用read_bin_file = fopen("vtest.bin", "rb");以二进制模式打开文件。注意模式中的“b”。这可以防止对新行字符进行特殊处理。

您的fseek也是不必要的,freadfwrite来电将为您处理。 从here“流的文件位置指示符按读取的字符数提前。”

相关问题