是否有库方法来查看是否存在识别 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)
但是这里你需要处理预期的异常
- SingleOrDefault,当存在多个路径时。 (如果您只需要第一个,可以将其替换为 FirstOrDefault)。
- Path.Combine 当 LINQ 表达式 returns 为空时。 (您可以在分配给 foundit 变量之前先使用 if(paths.Any(f=>File.Exists(Path.Combine(f,fileName))) 检查。
我有下面的代码。它工作正常,但我想知道是否有更简单的方法来做到这一点。是否有一种库方法可以查看是否存在识别 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)
但是这里你需要处理预期的异常
- SingleOrDefault,当存在多个路径时。 (如果您只需要第一个,可以将其替换为 FirstOrDefault)。
- Path.Combine 当 LINQ 表达式 returns 为空时。 (您可以在分配给 foundit 变量之前先使用 if(paths.Any(f=>File.Exists(Path.Combine(f,fileName))) 检查。