如何找到文件的完全限定路径名?

时间:2009-11-22 22:26:29

标签: c path qualified-name

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

3 个答案:

答案 0 :(得分: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上将':'替换为';'因为路径分隔符不同。

答案 1 :(得分:3)

查看shell API PathResolve(但是,在任何未来的Windows版本中都标记为“可移动”,所以我会避免它)和PathFindOnPath,相反,是一个稳定的API。使用PathFindOnPath,将文件名传递给搜索(例如yourexecutable.exe)作为第一个参数,将NULL作为第二个参数传递。

答案 2 :(得分:1)

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