2017-10-09 109 views
-2

コンパイラがコードをコンパイルすると、実行可能ファイルが吐き出されます。 実行している実行可能ファイルの名前を取得します。唯一の問題は、私が検索するすべての場所で、私は実行可能ファイルの全体のパスを取得する方法しか得られません。C++で実行可能ファイル名を取得するには?

app.exeという名前の実行可能ファイルがある場合は、コンソールに出力します。 オンラインでGetModuleFileName,GetModuleBaseName、およびargv[0]を使用すると言いますが、それらはすべてC:\Users\Lone-PC\Desktop\app.exeのような.exeへの完全なパスを与え、ただapp.exeだけではありません。

私はライブラリを使いたくないのですが、これはすべてWindowsマシンのコンソールアプリケーションに組み込まれています。

+2

私の問題を解決するコードがありますか?あなたは厳密により多くの情報を持っています。 – HTNW

+1

これは 'argv [0]'にあります。それを解析してください。あなたはそれにどのような問題がありますか? –

+0

@HTNW解析するとどういう意味ですか? – Joseph

答えて

0

ユーザーHTNWに感謝したいと思っています。 argv[0]のような前述の方法でディレクトリを処理する必要があります。

私はそれを調べてコードを借用し、ファイル名を文字列で返す関数を作成しました。

ここでは、全体のパスを持っている場合は、どのようなファイル名を解析するからあなたを停止し

string getFileName(string path) { 
    string filename = path; 
    const size_t last_slash_idx = filename.find_last_of("\\/"); 
    if (std::string::npos != last_slash_idx) { 
     filename.erase(0, last_slash_idx + 1); 
    } 
    const size_t period_idx = filename.rfind('.'); 

    return filename; 
} 
+0

実行ファイルの実名が必要な場合、 'argv [0]'は信頼できません。これはコマンドラインから解析され、 'CreateProcess'の' lpApplicationName'パラメータが使用されている場合、任意のコマンドラインでプログラムを起動することができます。 – eryksun

関連する問題