【问题标题】:Get the original location where the program is called [duplicate]获取调用程序的原始位置[重复]
【发布时间】:2016-05-16 12:46:46
【问题描述】:

有没有办法知道程序最初在 C 中生成的目录?我希望我的程序知道它在计算机中的位置。我已经尝试在direct.h 中使用_getcwd()。我还使用unistd.h 尝试了getcwd()。但这就是问题所在。如果我在我的程序目录中添加了一个 PATH,函数 _getcwd()getcwd() path 将返回我调用程序的路径。因此,如果我在 dekstop 中运行程序,它将返回桌面的路径。我已经尝试过使用this 方法,但它不能解决问题。它返回调用路径的值。我想知道使用什么函数来知道程序的路径,而不是程序被调用的路径。 我应该使用什么功能?

【问题讨论】:

  • 之前已经尝试过这些方法。它返回的是调用它的路径,而不是被调用程序的原始路径。

标签: c windows unistd.h getcwd


【解决方案1】:

当前的工作目录没有任何用处。除了巧合之外,可执行映像在文件系统中的位置与当前工作目录之间没有任何联系。

您可以通过调用_get_wpgmptr(Visual Studio 附带的 Microsoft 特定的 CRT 扩展)或 GetModuleFileName(为 hModule 传递 NULL来检索可执行文件的完全限定路径>),然后通过调用PathRemoveFileSpec(或PathCchRemoveFileSpec,Windows 8 及更高版本)提取路径。

【讨论】:

  • 我使用的是 Windows 7。_get_wpgmptr() 出现了什么库?已经包含 stdlib.hwindows.h 但编译器显示:undefined reference to ' _get_wpgmptr'
  • @BryanJames:_get_wpgmptr() 是 Visual Studio 的 CRT 实现的一部分,因此您需要 #include <stdlib.h> 使用 Visual Studio(或 Microsoft 编译器)。如果您使用不同的编译器,则可以改用 Windows API 调用 GetModuleFileName
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多