Visual Studio下的C/C++项目:找不到资源



当我在Visual Studio中为一个项目运行调试时,fopen函数可以正常工作。它试图打开项目中包含的文件,我在过滤器"Resources"中添加了该文件。但当我运行我的项目的.EXE文件时,我得到了空指针异常:0x000005c。

当我将该文件添加到与.EXE文件相同的目录中时,异常消失了。

这是我使用的指令:

fopen(&filename, "rb");

我知道建议使用fopen_s,但无论如何都找不到文件。。。

显然,文件总是在当前目录中搜索。。。

那么,如何将文件包含在.EXE中,并使文件的路径相对于.EXE,以某种方式将其包含在.EEXE中,而不是添加到有.EXE的目录中

您不能将该文件包含在.exe中。您只需要确保该文件与.exe.位于同一目录中

如果你真的,真的只想使用一个文件,你可以:

  • 将.exe和文本文件压缩在一起,并确保在自述文件中包含文本文件需要与.exe 位于同一位置

  • 使用数组/结构/其他方式将文件内容存储在程序中,并引用它而不是使用文件(我认为你不在乎用户能够在程序实例之外编辑这些数据,因为你希望它与可执行文件捆绑在一起,所以在这种情况下文件是不必要的)

只有当您将文件放在.exe目录中时,程序才能工作,这是因为文件的路径在程序中定义为类似.file.txtfile.txt的路径。当该文件与.exe不在同一目录中时,程序会尝试找到它,但无法找到,这就是为什么会出现错误。它在调试时起作用,因为文本文件的副本与debug.exe.位于同一位置

编辑:我也会忽略关于fopen_s和其他在命令末尾附加_s的变体的警告——这些都是特定于窗口的、非标准的,在大多数情况下毫无意义。如果你知道这个程序只会在windows环境中使用,而你没有为学校做一些需要编写标准代码的事情,为了安全起见,我建议你使用_s变体,但这会降低代码的可移植性。

相关内容

  • 没有找到相关文章

最新更新