【问题标题】:ftell error after the first call to fread第一次调用 fread 后出现 ftell 错误
【发布时间】:2011-03-13 19:05:45
【问题描述】:

所以我有一个非常简单的程序来读取文件的前 3 个字节:

诠释主要(无效) { 文件 *fd = NULL; 诠释我; 无符号字符测试 = 0; fd = fopen("test.bmp", "r"); printf("位置:%ld\n", ftell(fd)); 对于 (i=0; i

当我尝试使用文本文件时,它工作正常:

位置:0 位置:1 个字符:61 位置:2 字符:62 位置:3 字符:63

但是当我使用 PNG 运行它时,我得到:

位置:0 位置:147 字符:89 位置:148 字符:50 位置:149 字符:4E

请注意,文件的前 3 个字节确实是 89 50 4E 但我不知道 147 来自哪里。 使用 bmp 文件,我得到:

位置:0 位置:-1 字符:42 位置:0 字符:4D 位置:1 个字符:76

你知道这些第一名是从哪里来的吗? 非常感谢您的帮助

【问题讨论】:

    标签: c fread ftell


    【解决方案1】:

    需要以二进制方式打开文件:

    fd = fopen("test.bmp", "rb");
    

    如果您尝试在文本模式下读取位图之类的二进制文件,则对应于回车符和换行符的字节会混淆。

    【讨论】:

    • 感谢您的快速回答!
    【解决方案2】:

    请看这个问题Reading bytes from bmp file

    看起来问题出在打开模式上。

    【讨论】:

      【解决方案3】:
      • 检查文件是否存在于您的开发者/程序目录中
      • 检查文件是否被其他应用程序使用
      • 尝试以第二个名称复制文件,然后打开此文件
      • 检查操作系统:Windows 使用 C:\Users\ ,而 Linux 使用 /home/user (您可以看到差异吗?
      • 检查您的代码,如果它适用于 Windows:C:\\Users\\you\\filename.ext
      • 检查您的文件限制,如果全部失败,请增加它
      • 最后但并非最不重要的一点是,使用 fseek(filehandle,SEEK_SET); 指向文件顶部(位置:0)的文件指针

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多