1

Windows では、「ファイル名を指定して実行」に移動し、「cmd」と入力して Enter キーを押し、「C:\Windows\system32\cmd.exe」を簡単に起動できます。同じことが "python" または "pythonw" にも当てはまります (ただし、2 番目の例では何も表示されません)。「python」または「pythonw」を実行したいことと、それが PATH 上にあることだけがわかっている場合、C で実行可能ファイルの完全修飾パス名を見つける最も簡単な方法は何ですか? この質問は問題に大きく関連しているようですが、C での最終的な解決策にはなりません。_execpでは文字列 "python" または "pythonw" を使用できますが、関数の argv パラメーターへの最初の引数の修飾パスが必要です。

4

3 に答える 3

4

getenv() を使用してパスを取得し、それを文字列に分割して (Windows ではセミコロンで)、各ディレクトリに指定された名前の実行可能ファイルがあるかどうかを順番にテストします。

#include <iostream>
#include <sstream>
#include <sys/stat.h>

int main(void)
{
    std::stringstream path(getenv("PATH"));
    while (! path.eof())
    {
        std::string test;
        struct stat info;
        getline(path, test, ':');
        test.append("/myfile");
        if (stat(test.c_str(), &info) == 0)
        {
            std::cout << "Found " << test << std::endl;
        }
    }
}

myfile を任意のものに置き換え、Windows では「:」を「;」に置き換えます。パスセパレーターが異なるためです。

于 2009-11-22T22:42:53.630 に答える
3

シェル API のPathResolve (ただし、「将来の Windows バージョンでは削除可能」とマークされているため、避けたい) とPathFindOnPathを見てください。代わりに、安定した API です。PathFindOnPath を使用して、検索するファイル名 (例: yourexecutable.exe) を最初のパラメーターとして渡し、NULL を 2 番目のパラメーターとして渡します。

于 2009-11-22T22:48:39.517 に答える
1

PathFindOnPath()を使用し、2 番目の値に NULL を渡して、現在の PATH 環境変数を検索できます。

于 2009-11-22T22:45:38.320 に答える