是否有库方法来查看是否存在识别 PATH 环境变量中路径的文件

Is there a library method to see if a file exists that is cognizant of paths in the PATH environment variable

我有下面的代码。它工作正常,但我想知道是否有更简单的方法来做到这一点。是否有一种库方法可以查看是否存在识别 PATH 环境变量中路径的文件,这样我就可以执行类似 if (FileExistsInAnyPath("robocopy.exe") 的操作,而不必从 PATH[=13= 中提取所有路径]

string foundIt = "";

string[] paths = (Environment.GetEnvironmentVariable("Path")).Split(';');

foreach (string path in paths)
{
    if (File.Exists((path + "\robocopy.exe")))
    {
        foundIt = (path + "\robocopy.exe");
        break;
    }
}

if (!string.IsNullOrEmpty(foundIt))
{
    // do something with fq path name
    Console.WriteLine("found it here: " + foundIt);
}

我认为 Linq 会帮助你(使用 System.Linq)

var paths = (Environment.GetEnvironmentVariable("Path")).Split(';');
var fileName = "robocopy.exe";
var foundit = Path.Combine(paths.SingleOrDefault(f=>File.Exists(Path.Combine(f,fileName))),fileName);

此外,您可以将该代码包装在您自己的方法 FileExistsInAnyPath(string fileName)

但是这里你需要处理预期的异常

  1. SingleOrDefault,当存在多个路径时。 (如果您只需要第一个,可以将其替换为 FirstOrDefault)。
  2. Path.Combine 当 LINQ 表达式 returns 为空时。 (您可以在分配给 foundit 变量之前先使用 if(paths.Any(f=>File.Exists(Path.Combine(f,fileName))) 检查。