[MFC]実行ファイルのパスを取得する方法

MFCで実行ファイルのパスを取得するのは少し面倒くさいです。

この記事では、MFCで実行ファイルのパスを取得する方法を解説します。

実行ファイルのパスを取得

実行ファイルのパスを取得するにはGetModuleFileName関数で実行ファイルのファイルパスを取得後、_wsplitpath_s関数でパスの分解をして、ファイル名を除いた部分を再結合します。

MFC
// 実行ファイルのパスを取得
CString GetModulePath()
{
    // 実行ファイルのパス
    CString modulePath = _T("");
    // ドライブ名、ディレクトリ名、ファイル名、拡張子
    wchar_t path[_MAX_PATH], drive[_MAX_PATH], dir[_MAX_PATH], fname[_MAX_PATH], ext[_MAX_PATH];

    // 実行ファイルのファイルパスを取得
    if (::GetModuleFileName(NULL, path, _MAX_PATH) != 0)
    {
        // ファイルパスを分割
        ::_wsplitpath_s(path, drive, dir, fname, ext);
        // ドライブとディレクトリ名を結合して実行ファイルパスとする
        modulePath = CString(drive) + CString(dir);
    }

    return modulePath;
}

上記関数を実行すると「¥」で終わる実行ファイルのフルパスが取得できます。

明示的にマルチバイト文字版(上記はUnicode文字版)で取得したい場合には、ドライブ名等の変数の型をchar型にしてGetModuleFileNameA関数と__splitpath_sを使えば同じことが実現できます。(以下を参照)

[C++]実行ファイルのパスを取得する方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です