2009-11-22 2 views
1

В Windows вы можете перейти в «Выполнить», введите «cmd», нажмите enter и запустите «C: \ Windows \ system32 \ cmd.exe» довольно легко. То же самое верно для «python» или «pythonw» (хотя во втором примере ничего не появляется). Если все, что вы знаете, это то, что вы хотите выполнить «python» или «pythonw» и что он находится в PATH, какой самый простой способ в C определить полное имя пути для исполняемого файла? This question, по-видимому, сильно связан с проблемой, но не дает окончательного решения в C. _execp позволяет использовать строку «python» или «pythonw», но для этого параметра требуется квалифицированный путь для первого аргумента для параметра argv функции.Как найти полное имя пути к файлу?

ответ

3

Посмотрите на API-интерфейс оболочки PathResolve (который, однако, помечен как «съемный в любой будущей версии Windows», поэтому я бы его избежал) и PathFindOnPath, что вместо этого является стабильным API. С PathFindOnPath передайте имя файла для поиска (например, yourexecutable.exe) в качестве первого параметра, а NULL - второго.

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 замените ':' на ';' так как разделитель путей отличается.

+0

... а определение «исполняемый» задается как «echo% PATHEXT%». – RichieHindle

1

Вы можете использовать PathFindOnPath() и передать NULL для второго значения для поиска текущей переменной среды PATH.

Смежные вопросы