我有这个代码来返回true / false;
public static bool HasExecutable(string path)
{
var exts = "*.exe";
if (path.AsDirectory().Exists) return true;
if( path.AsDirectory().GetFiles(exts).Any(i => path.Contains(exts))) return true;
return false;
}
}
}
我的输出是一个错误,停止我的程序,我在这里错过了一些逻辑?
答案 0 :(得分:3)
您可以使用模式匹配枚举目录,并使用Any
扩展方法。
public static bool HasExecutable(string path)
{
var exts = "*.exe";
return Directory.EnumerateFiles(path, exts).Any();
}
答案 1 :(得分:1)
这一行
if (path.AsDirectory().Exists) return true;
如果目录本身存在,返回true
。相反,如果目录不存在,它应返回false
:
if (!path.AsDirectory().Exists) return false;
LINQ部分也存在问题:路径上的Contains
调用永远不会返回true
"*.exe"
字符串,因为路径不允许使用通配符。但是,您根本不需要条件,因为GetFiles
已经为您完成了过滤:
return path.AsDirectory().GetFiles(exts).Any();
您可以将这两个条件折叠成一个语句:
return path.AsDirectory().Exists
&& path.AsDirectory().GetFiles(exts).Any();