【问题标题】:fopen returning NULL when trying to open a bmp file (C++)?fopen 在尝试打开 bmp 文件(C++)时返回 NULL?
【发布时间】:2012-11-08 20:00:23
【问题描述】:
FILE * in;
in = fopen("file1.bmp", "rb"); 
if (in == NULL) {
    perror("file1.bmp");
    return ;
}

为什么我无法打开 *.bmp 文件。 fopen() 返回 NULL

谁能帮助我如何成功打开 BMP 文件。我应该使用其他一些 C++ 函数吗?如果是,请告诉我。一个例子会很有帮助。我在VS2008中使用VC++。

提前致谢。

【问题讨论】:

  • 打开 .bmp 文件和打开任何其他类型的文件没有区别(二进制模式问题除外,您说得对)。由于文件打开失败的众多原因之一,它失败了,这可能是 Chris 在下面指定的问题之一。

标签: c visual-c++ file-io fopen bmp


【解决方案1】:

该文件不存在,或者您无法从中读取(可能是文件权限)?
您可能有工作目录问题。尝试使用完全限定的路径打开文件。
这也是一个普通的 C 问题

【讨论】:

  • 我赌 2 美分他没有在他的 IDE 上配置工作目录。
  • fopen 只是返回 NULL。没有具体的错误信息作为线索。是的,我什至尝试提供 BMP 文件的完整绝对路径。我右键单击 BMP 文件并验证它是否选中了 read Onlt 复选框。无法猜测还有什么原因。
  • 如果 fopen 返回NULL,那么唯一的选项是文件权限、文件不存在或文件系统错误。如果你在windows下编程,一定要转义反斜杠或使用普通斜杠作为路径分隔符,例如:fopen("c:\\test\\file1.bmp", "rb");fopen("c:/test/file1.bmp", "rb");
  • 谢谢它通过提供完整路径转义反斜杠解决了我的问题。如果您还可以让我知道如何配置我的 VS2008 以便它可以拾取父路径说“C:\\Test\\”,即使我没有提供 BMP 文件的绝对路径,那将是很好的。要注意的是.cpp 文件和 BMP 文件位于不同的文件夹中。
【解决方案2】:
#include<stdio.h>
#include <errno.h>

int main()
{
FILE * in;
in = fopen("file1.bmp", "rb"); 
if (in == NULL) {
    perror("file1.bmp");
    printf("Error %d \n", errno);
    return ;
}

}

使用这种方式查看errno 并从这里找到它的含义http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多