Frage

Unter Windows können Sie gehen "Ausführen", geben Sie "cmd", drücken Sie die Eingabetaste, und starten "C: \ Windows \ system32 \ cmd.exe" up ziemlich leicht. Das gleiche gilt für „Python“ oder „pythonw“ (obwohl nichts erscheint im zweiten Beispiel oben). Wenn alles, was Sie wissen, ist, dass Sie ausführen „Python“ wollen oder „pythonw“ und dass es auf der PATH ist, was ist der einfachste Weg, in C, um herauszufinden, der vollständig qualifizierten Pfadnamen für die ausführbare Datei? _ execp ermöglicht die Zeichenfolge mit "python" oder "pythonw", sondern erfordert den qualifizierten Pfad für das erste Argument der argv Parameter der Funktion.

War es hilfreich?

Lösung

Haben Sie einen Blick auf die Shell-APIs PathResolve (das ist jedoch markiert als "Wechsel in jeder zukünftigen Windows-Version", so dass ich es vermeiden würde) und PathFindOnPath , dass, ist stattdessen eine stabile API. Mit PathFindOnPath, passieren den Dateinamen (z.B. yourexecutable.exe) als ersten Parameter und NULL als die zweite suchen.

Andere Tipps

Mit getenv (), um den Weg zu bekommen, es in Strings aufgeteilt (durch Semikolon unter Windows), dann testen, ob es eine ausführbaren Datei mit dem angegebenen Namen in jedem Verzeichnis der Reihe nach.

#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;
        }
    }
}

Ersetzen Meinedat mit was auch immer, und unter Windows ersetzen ‚:‘ mit ‚;‘ da der Pfadseparator ist anders.

Sie können mit PathFindOnPath () und NULL für den zweiten Wert übergeben Sie die aktuellen Umgebungsvariable PATH zu suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top