代码之家  ›  专栏  ›  技术社区  ›  Noctis Skytower

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

  •  1
  • Noctis Skytower  · 技术社区  · 15 年前

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   Matteo Italia    15 年前

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

        2
  •  4
  •   Tom    15 年前

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

        3
  •  1
  •   i_am_jorf    15 年前

    你可以使用 PathFindOnPath() ,并为第二个值传递null以搜索当前路径环境变量。