C文件读取错误的字符数

时间:2011-08-29 07:50:43

标签: c file-io

我偶然发现了一个问题,我试图在一个文件中读取,根据windows,大小为'87 .1 kb',并在程序中使用ftell方法,返回'89282',有效地确认了哪些窗口在说。

那么为什么每个方法从文件中读取字符只返回173或174个字符?

该文件是一个重命名为.txt的.GIF文件(我正在尝试构建一个可以完全加载数据的程序,因为我正在编写一个程序来下载在线图像并需要对它们进行比较)。 / p>

到目前为止,我已经尝试过:

  • fgetc - 返回173/174个字符。
  • fread - 与上面相同,这是一个包含1024或更多空格的字符串。
  • fgets - 不起作用(因为它不会返回它读取的字符数 - 包含空值的字符)。
  • setvbuf - 使用_IONBF禁用此功能,或者甚至提供1024或更多的缓冲区意味着仍然会返回173/174。
  • fflush - 这产生了一个'结果',虽然是负面的 - 它返回'2'字符而不是'173'。

我完全不知道为什么它不读取超过173/174个字符的内容。有什么我需要补偿或期望在较低的水平?我需要扩展一些缓冲区或者需要注意的一些奇怪的角色?

1 个答案:

答案 0 :(得分:3)

这是一件值得关注的事情。在十六进制查看器中查看该文件,看看是否在某个173/174偏移处附近有一个CTRL-Z。

然后检查您是否使用"r"模式打开它。

如果是这样,可能是文本和二进制文件之间的Windows转换正在停止您的读取,因为CTRL-Z是文本模式下的EOF标记。如果是这样,您可以使用"rb"上的fopen模式解决此问题。

如果失败,您需要发布展示问题行为的最小代码段。对于我们这里的一些人来说,这可能是显而易见的,但通常只有在我们能够看到代码的情况下: - )