Visual C ++ 2010: argv [0] - полный путь в режиме отладки, но только имя .exe в режиме выпуска - PullRequest
0 голосов
/ 19 марта 2012

В Visual Studio 2010 C ++ я читаю argv [0], чтобы получить рабочий каталог.

В режиме отладки он определенно показывает полный путь к каталогу и само имя исполняемого файла (как и ожидалось)

В режиме выпуска он имеет ТОЛЬКО имя программы .exe, а не полный рабочий путь.

  1. почему?
  2. Как получить рабочий каталог?

1 Ответ

4 голосов
/ 19 марта 2012

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);
...