実行されている自分のプログラムのフルパス名を取得する
自プログラムのフルパス名を取得する方法を紹介します。
私は、GetCurrentDirectoryをこの目的に使っていたことがありましたが、 ファイル選択ダイアログなどでカレントディレクトリが変わると使えなく なるため、GetModuleFileNameを使っています。以下にサンプルプログラムを示します。

char szPath[_MAX_PATH];
char szDrive[_MAX_DRIVE];
char szDir[_MAX_DIR];
char szFileName[_MAX_FNAME];
char szExt[_MAX_EXT];
char szOutput[_MAX_PATH * 5 + 1024];//(^^;
DWORD dwRet;

//初期化
memset(szPath, 0x00, sizeof(szPath));
memset(szDrive, 0x00, sizeof(szDrive));
memset(szDir, 0x00, sizeof(szDir));
memset(szExt, 0x00, sizeof(szExt));
memset(szOutput, 0x00, sizeof(szOutput));
dwRet = 0;
	
//実行中のプロセスのフルパス名を取得する
dwRet = GetModuleFileName(NULL, szPath, sizeof(szPath));
if(dwRet == 0) {
//エラー処理など(省略)
}
	
//フルパス名を分割する
_splitpath(szPath, szDrive, szDir, szFileName, szExt); 

//出力文字列を作成
wsprintf(szOutput,"実行しているプログラムのフルパス名%s\r\nドライブ%s\r\n"
	"ディレクトリ%s\r\nファイル名%s\r\n拡張子%s",
	szPath, szDrive, szDir, szFileName, szExt);

//メッセージボックスで出力
MessageBox(NULL, szOutput, "こんなんでました", MB_OK);

 
GetModuleFileName(第一引数NULL)で自プロセスのフルパスを取得して、 splitpath関数でディレクトリ、ドライブ、ファイル名、拡張子別に 文字列を切り分けます。splitpathは引数にNULL指定が可能なので、 必要な情報のみを取得することも可能です。

関連リンク
GetModuleFileName(MSDN)

戻る