我试图以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%匹配
答案 0 :(得分:4)
如果是您正在读写的二进制数据,那么您应该使用read_bin_file = fopen("vtest.bin", "rb");
以二进制模式打开文件。注意模式中的“b”。这可以防止对新行字符进行特殊处理。
您的fseek
也是不必要的,fread
和fwrite
来电将为您处理。
从here“流的文件位置指示符按读取的字符数提前。”