C 文件将无法逐字节完全读取
使用我正在用Dev-C++编写的C程序,我希望逐字节读取二进制文件。出于某种原因,读取在261字节处停止。这是一个复制bavior的简化代码C 文件将无法逐字节完全读取,c,file-io,C,File Io,使用我正在用Dev-C++编写的C程序,我希望逐字节读取二进制文件。出于某种原因,读取在261字节处停止。这是一个复制bavior的简化代码 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 open
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 CC1A 1F C5 8A
我还尝试了fgetc()
和feof()
,行为也是一样的
为什么读取会在偏移量260处停止?您可能需要在以下位置打开文件:
您可能需要在以下位置打开文件:
如果您在windows上,文件处于文本模式,
1A
==ctrl+Z,即EOF。如果您在windows上,文件处于文本模式,1A
==ctrl+Z,即EOF。非常感谢您的快速回答!这就解决了问题。我一直在错误的位置搜索。@rinntech提到dev-c++
立即触发了“哦,对了,windows”:-)非常感谢您的快速回答!这就解决了问题。我一直在错误的位置搜索。@rinntech提到dev-c++
立即触发了“哦,对了,windows”:-)
fopen(in_filename, "rb");