在 Visual Studio 2010 C++ 中,我正在阅读 argv[0] 以获取工作目录。
在调试模式下,它肯定会显示目录的完整路径和 exe 文件名本身(如预期的那样)
在发布模式下,它只有程序 .exe 名称,而不是完整的工作路径。
- 为什么?
- 如何获取工作目录?
在 Visual Studio 2010 C++ 中,我正在阅读 argv[0] 以获取工作目录。
在调试模式下,它肯定会显示目录的完整路径和 exe 文件名本身(如预期的那样)
在发布模式下,它只有程序 .exe 名称,而不是完整的工作路径。
MSVC 会将用于启动可执行文件的命令放入argv[0]
- 这与当前工作目录无关。
例如,如果用于启动的命令foo.exe
是:
foo
,我通过搜索路径找到的可执行文件argv[0]
将是foo
c:\foos-dir\foo
,(不搜索路径)argv[0]
将是c:\foos-dir\foo
foo.exe
, argv[0] 将是foo.exe
等等
您可能应该使用Win32 GetCurrentDirectory()
API或运行时函数获取_getcwd()
当前工作目录。
这是一个使用的简短示例GetCurrentDirectory()
:
TCHAR buffer[128];
DWORD const buffer_chars = sizeof(buffer)/sizeof(buffer[0]);
DWORD result = GetCurrentDirectory( buffer_chars, buffer);
if ((result == 0) || (result >= buffer_chars)) {
puts("problem getting the working directory");
exit(1);
}
printf( "Current working directory: %s\n", buffer);