如果给定目录包含" .exe"我试图返回True或false。

时间:2017-09-10 11:44:37

标签: c# linq filesystems

我有这个代码来返回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;
    }
}

}

我的输出是一个错误,停止我的程序,我在这里错过了一些逻辑?

2 个答案:

答案 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();