【问题标题】:Is there a library method to see if a file exists that is cognizant of paths in the PATH environment variable是否有一种库方法来查看是否存在识别 PATH 环境变量中的路径的文件
【发布时间】:2019-02-20 15:41:19
【问题描述】:

我有下面的代码。它工作正常,但我想知道是否有一种不那么冗长的方法。是否有一个库方法来查看是否存在一个识别 PATH 环境变量中路径的文件,这样我就可以执行if (FileExistsInAnyPath("robocopy.exe") 之类的操作,而无需从PATH 中提取所有路径

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);
}

【问题讨论】:

    标签: c# path file-exists


    【解决方案1】:

    我认为 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. 当 LINQ 表达式返回 null 时,Path.Combine。 (您可以先使用 if(paths.Any(f=>File.Exists(Path.Combine(f,fileName))) 进行检查,然后再分配给 foundit 变量。

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 2017-08-30
      • 2020-02-19
      • 2014-12-19
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多