【问题标题】:How do I make sure fopen() opens a file relative to the executable rather than my current directory in C++?如何确保 fopen() 打开一个相对于可执行文件而不是我在 C++ 中的当前目录的文件?
【发布时间】:2016-12-18 15:44:45
【问题描述】:

我有一个在 Windows 7 上使用 MinGW 编译的 C++ 程序,它调用 fopen(),指定一个具有相对路径的文件。如果您在其自己的目录中运行可执行文件,该程序可以正常工作,但我注意到如果我在不同目录中使用命令行运行该程序,fopen() 将找不到指定的文件。例如,如果我的可执行文件 "foo.exe" 和指定的文件 "bar.txt" 位于 "C:\project\build\" 并且我在 "C:\project\" 中运行 exe,fopen() 将找不到文件。是否有一些使用代码或编译器标志的解决方法?

【问题讨论】:

  • 指定绝对路径?
  • 或者如果你可能会移动“project\”,试试this
  • 看到这个问题:stackoverflow.com/questions/1528298/get-path-of-executable 如有必要,您可以 cd 到包含可执行文件的目录,具有预期的结果。
  • 相对路径总是相对于进程当前工作目录。并且进程当前工作目录在编译时并不固定,编译器没有它的概念,所以在编译时它永远无法解决它。
  • 事实上,即使在运行时,进程的当前工作目录也不是固定的。这个过程可以自己改变它。

标签: c++ fopen


【解决方案1】:

我可以看到这是访问相对于可执行文件的指定位置的资源所必需的,尽管不知道可执行文件本身的绝对路径。我建议获取可执行文件的绝对路径,可能使用Get path of executable 中描述的方法之一,然后将进程的工作目录更改为可执行文件的父目录,或者构造一个绝对路径到你想要的文件通过解析您对该目录的相对路径来打开。然后你可以将结果传递给fopen()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2021-09-03
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多