【问题标题】:How do you find the fully qualified path name of a file?如何找到文件的完全限定路径名?
【发布时间】:2010-12-19 07:27:07
【问题描述】:

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

【问题讨论】:

    标签: c path qualified-name


    【解决方案1】:

    使用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 上将 ':' 替换为 ';'因为路径分隔符不同。

    【讨论】:

    • ...而“可执行”的定义由echo %PATHEXT%给出。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多