2009-11-22 347 views
1

在Windows上,您可以转到“运行”,键入“cmd”,然后按回车,然后轻松启动“C:\ Windows \ system32 \ cmd.exe”。 “python”或“pythonw”也是如此(尽管第二个例子中没有弹出)。如果您只知道要执行“python”或“pythonw”并且它位于PATH中,那么C中最简单的方法是找出可执行文件的全限定路径名称? This question似乎与该问题高度相关,但并未给出C中的最终解决方案。_execp允许使用字符串“python”或“pythonw”,但需要该函数的argv参数的第一个参数的限定路径。如何找到文件的全限定路径名称?

回答

3

查看shell 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 2009-11-22 22:47:17

1

您可以使用PathFindOnPath(),并为第二个值传递NULL以搜索当前的PATH环境变量。

相关问题