0

在 Visual Studio 2010 C++ 中,我正在阅读 argv[0] 以获取工作目录。

在调试模式下,它肯定会显示目录的完整路径和 exe 文件名本身(如预期的那样)

在发布模式下,它只有程序 .exe 名称,而不是完整的工作路径。

  1. 为什么?
  2. 如何获取工作目录?
4

1 回答 1

4

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);
于 2012-03-19T18:33:26.343 回答