文件不会逐字节完全读取
File will not be completely read byte by byte
使用我用 Dev-C++ 编写的 C 程序,我想逐字节读取二进制文件。由于某种原因,读取在 261 字节处停止。这是重现行为的简化代码。
int main(int argc, char *argv[])
{
FILE *in_fp;
char in_filename[25] = "data.raw";
in_fp = fopen(in_filename,"r");
if( in_fp == NULL ) {
perror("Error while opening the input file.\n");
system("PAUSE");
exit(EXIT_FAILURE);
}
int readcnt = 0;
while (1) {
unsigned char buffer;
if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
printf("read eof after %d\n", readcnt);
break;
} else {
printf("read = %d\n", buffer);
}
readcnt++;
}
fclose(in_fp);
return 0;
}
文件 data.raw 的大小为 104 KiB。
上面程序的输出以:
结尾
...
read = 255
read = 4
read = 204
read eof after 260
使用十六进制编辑器,我可以找到字节 FF 04 CC ,这之后应该有字节,因为文件不在末尾: FF 04 CC 1A 1F C5 8A .
我也尝试了 fgetc()
和 feof()
,行为是一样的。
为什么读数在偏移量 260 处停止?
您可能需要在 "binary mode" 中打开您的文件:
fopen(in_filename, "rb");
使用我用 Dev-C++ 编写的 C 程序,我想逐字节读取二进制文件。由于某种原因,读取在 261 字节处停止。这是重现行为的简化代码。
int main(int argc, char *argv[])
{
FILE *in_fp;
char in_filename[25] = "data.raw";
in_fp = fopen(in_filename,"r");
if( in_fp == NULL ) {
perror("Error while opening the input file.\n");
system("PAUSE");
exit(EXIT_FAILURE);
}
int readcnt = 0;
while (1) {
unsigned char buffer;
if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
printf("read eof after %d\n", readcnt);
break;
} else {
printf("read = %d\n", buffer);
}
readcnt++;
}
fclose(in_fp);
return 0;
}
文件 data.raw 的大小为 104 KiB。
上面程序的输出以:
结尾...
read = 255
read = 4
read = 204
read eof after 260
使用十六进制编辑器,我可以找到字节 FF 04 CC ,这之后应该有字节,因为文件不在末尾: FF 04 CC 1A 1F C5 8A .
我也尝试了 fgetc()
和 feof()
,行为是一样的。
为什么读数在偏移量 260 处停止?
您可能需要在 "binary mode" 中打开您的文件:
fopen(in_filename, "rb");