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 に答える