在Visual Studio 2010 C++中,我正在读取argv[0]以获取工作目录。
在调试模式下,它肯定会显示目录的完整路径和exe文件名本身(如预期)
在发布模式下,它只有程序.exe名称,而不是完整的工作路径。
- 为什么
- 如何获取工作目录
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);