我正在尝试检测文件中的最后一个字节是否为control-z (the MS-DOS originating end of file byte - 0x1A),但我没有取得任何成功。我正在使用
fseek(filePointer,-1,SEEK_END);
隔离最后一个字节然后我正在使用
fread(buffer, sizeof(buffer[0]), sizeof(custom_char), filePointer);
尝试读取最后一个字节。
当我尝试读取该字节时,我基本上是垃圾了,我想知道fread是否默认忽略0x1A字节,或者是否有人在过去遇到的任何其他古怪行为。
当前逻辑出现故障,正在尝试读取最后一个字节并考虑到fread返回0时发现的文件结束标记(fread应该返回读取的元素数量,对吧?):
if(fread(buffer, sizeof(buffer[0]), sizeof(custom_char), filePointer) == 0)
{
// strip off the last byte
}
编辑: 我应该补充一点,调用fopen之后我出现的问题,写入BOM,并且错误地认为BOM的第3个字节是文件标记的0xA1末尾并被剥离。
答案 0 :(得分:3)
您需要以二进制模式打开文件:
FILE *filePointer = fopen("yourfile.txt", "rb");
否则文件在文本模式下打开,它会将CR-LF字符对转换为C'\ n'字符,并在Windows / MSDOS上删除EOF字符。