【问题标题】:Extracting the current executable name提取当前可执行文件名
【发布时间】:2012-05-13 14:34:25
【问题描述】:

首先,我想说我不是指完整的路径,什么
GetModuleFileName 或 argv[0] 产量。有没有比在最后一个反斜杠之前忽略所有内容更聪明的解决方案?

【问题讨论】:

  • 你在什么平台上?我想是 Windows?
  • 在最后一个路径分隔符之后取所有内容有什么问题?我自己,我只是在 argv[0] 上使用我自己编写的 basename 函数。
  • 还有路径函数可以做到。
  • Luka,你猜对了,标签不是意外添加的 ;)

标签: c++ windows


【解决方案1】:

首先,您希望通过调用GetModuleFileName 并传递NULL 作为模块句柄来获取可执行文件的完整路径。然后调用PathFindFileName拉出文件名组件。

GetModuleFileNameargv[0] 实际上是有区别的。后者是用于启动进程的名称。它可能缺少完整路径,但更重要的是,它可能缺少 .exe 扩展名。如果你想知道实际的文件名,那么你需要使用GetModuleFileName

【讨论】:

  • 这就是我想要找到的。我发现它真的有趣的是,该示例如何使用void main。认真的吗,微软?
  • 微软被允许这样做,因为他们编写了编译器。因此,他们可以使用您和我(作为遵循公民的良好标准)无法使用的编译器特定扩展。
【解决方案2】:

如果您使用 .NET,那么here 就是一个答案。但在内部它可能会调用GetModuleFileName

【讨论】:

  • 我不使用 .NET。这是 Windows api 项目。
【解决方案3】:

在 Windows C/C++ 中,有一个可以读取的全局变量 extern char * _pgmptr 以及来自 _get_pgmptr(char ** buffer) 的不安全字符串副本。

注意事项

仅当您的程序具有狭窄的入口点(如 main() 或 WinMain())时才调用 _get_pgmptr()。 _pgmptr 全局变量包含与进程关联的可执行文件的完整路径。如需更多信息,请参阅_pgmptr, _wpgmptr

如果一个 DLL 在两个进程中加载​​,它在一个进程中的文件名可能与在另一个进程中的文件名不同。

全局变量_pgmptr自动初始化为可执行文件的全路径,可用于检索可执行文件的全路径名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2011-01-12
    • 2012-08-28
    • 2016-06-03
    • 2021-08-23
    • 2010-11-02
    相关资源
    最近更新 更多