Visual Studio 2010 C ++では、作業ディレクトリを取得するためにargv[0]を読み取っています。
デバッグモードでは、ディレクトリのフルパスとexeファイル名自体が確実に表示されます(予想どおり)
リリースモードでは、完全な動作パスではなく、プログラムの.exe名のみが含まれます。
- なぜ?
- 作業ディレクトリを取得する方法は?
Visual Studio 2010 C ++では、作業ディレクトリを取得するためにargv[0]を読み取っています。
デバッグモードでは、ディレクトリのフルパスとexeファイル名自体が確実に表示されます(予想どおり)
リリースモードでは、完全な動作パスではなく、プログラムの.exe名のみが含まれます。
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);