Visual C++2010:argv[0]在调试模式下是完整路径,但在发布模式下只有.exe名称



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

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

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

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

MSVC会将用于启动可执行文件的命令放入argv[0]中——这与当前工作目录无关。

例如,如果用于启动foo.exe的命令为:

  • foo,并且通过搜索路径找到的可执行文件i,argv[0]将是foo
  • c:foos-dirfoo,(不搜索路径)argv[0]将为c:foos-dirfoo
  • 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: %sn", buffer);

最新更新