有没有办法在不执行“where”命令提示符命令的情况下动态查找C#中的路径?
例如,如果我想找到mspaint exe,我可以在命令提示符下输入
where mspaint
然后返回路径。
答案 0 :(得分:5)
我不认为Common Language Runtime中有一个内置方法可以为你做这个,但你当然可以自己做:
PATH
环境变量;
分隔符以获取路径中的目录列表program
示例:
public static string FindInPath(string filename)
{
var path = Environment.GetEnvironmentVariable("PATH");
var directories = path.Split(';');
foreach (var dir in directories)
{
var fullpath = Path.Combine(dir, filename);
if (File.Exists(fullpath)) return fullpath;
}
// filename does not exist in path
return null;
}
不要忘记在文件名中添加.exe
。 (或者,您可以修改上面的代码来搜索任何可执行的扩展程序:.bat
,.com
,.exe
;或者甚至可能是任何扩展程序。)
答案 1 :(得分:0)
这是基于@TypeIA的答案,但它支持当前目录和所有PATHEXT
。
public static string Where(string file)
{
var paths = Environment.GetEnvironmentVariable("PATH").Split(';');
var extensions = Environment.GetEnvironmentVariable("PATHEXT").Split(';');
return (from p in new[] { Environment.CurrentDirectory }.Concat(paths)
from e in new[] { string.Empty }.Concat(extensions)
let path = Path.Combine(p.Trim(), file + e.ToLower())
where File.Exists(path)
select path).FirstOrDefault();
}