如何找到使用环境路径可能不完全合格的文件?

csh*_*net 4 .net c# path relative-path environment-variables

我有一个可执行文件名,例如“ cmd.exe”,需要解析它的标准路径。我知道exe出现在PATH环境变量中列出的目录之一中。有没有一种方法可以解析完整路径而无需解析和测试PATH变量中的每个目录?基本上我不想这样做:

foreach (string entry in Environment.GetEnvironmentVariable("PATH").Split(';'))
    ...
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法,对吗?

Ahm*_*eed 5

这是另一种方法:

string exe = "cmd.exe";
string result = Environment.GetEnvironmentVariable("PATH")
    .Split(';')
    .Where(s => File.Exists(Path.Combine(s, exe)))
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

结果:C:\ WINDOWS \ system32

Path.Combine()调用用于处理不以斜杠结尾的路径。这将正确连接File.Exists()方法要使用的字符串。


Dan*_*ott 5

你可以用 Linq 来实现

string path = Environment
                .GetEnvironmentVariable("PATH")
                .Split(';')
                .FirstOrDefault(p => File.Exists(p + filename));
Run Code Online (Sandbox Code Playgroud)

也许更具可读性?

  • 我相信您需要先正确构造路径,然后才能调用 File.Exists。File.Exists(Path.Combine(p, 文件名)) (3认同)

Don*_*nut 2

这似乎已经是一个很好的方法了——据我所知,搜索PATH环境变量中的目录是 Windows 在尝试解析路径时所做的事情。