首先,我想说的是,我不是指完整的道路,是什么 GetModuleFileName或argv [0] yield。有没有一个更聪明的解决方案,而不是在最后一次反斜杠之前解雇所有内容?
答案 0 :(得分:16)
首先,您希望通过调用GetModuleFileName
传递NULL
作为模块句柄来获取可执行文件的完整路径。然后调用PathFindFileName
以提取文件名组件。
GetModuleFileName
和argv[0]
之间存在差异。后者是用于启动该过程的名称。它可能缺少完整路径,但更重要的是,它可能缺少.exe
扩展名。如果您想知道实际文件名,则需要使用GetModuleFileName
。
答案 1 :(得分:0)
如果您使用.NET,那么here就是答案。但在内部可能会调用GetModuleFileName
。
答案 2 :(得分:0)
在Windows C / C ++中,可以读取全局变量extern char * _pgmptr
以及从_get_pgmptr(char ** buffer)
获得的不安全的字符串副本。
注意事项
仅当程序的入口点较窄时才调用_get_pgmptr(),例如main()或WinMain()。 _pgmptr全局变量包含与该进程关联的可执行文件的完整路径。有关更多信息,请参见_pgmptr, _wpgmptr。
如果在两个进程中加载DLL,则一个进程中的文件名可能与另一进程中的文件名不同。
全局变量_pgmptr自动初始化为可执行文件的完整路径,并可用于检索可执行文件的完整路径名。