Есть ли метод библиотеки, чтобы увидеть, существует ли файл, который знает пути в переменной среды PATH - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть код ниже.Это работает хорошо, но мне интересно, есть ли менее подробный способ сделать это.Есть ли библиотечный метод, чтобы увидеть, существует ли файл, который знает пути в переменной среды 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);
}

1 Ответ

0 голосов
/ 16 сентября 2018

Я думаю, что 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 возвращает ноль.(вы можете проверить сначала с помощью if (paths.Any (f => File.Exists (Path.Combine (f, fileName))) перед назначением переменной foundit.
...