根据多个条件从Directory.EnumerateFiles中排除文件

时间:2014-12-04 02:12:30

标签: vb.net

有没有办法根据多个条件从Directory.EnumerateFiles中排除文件?

基于扩展的过滤工作正常。但我也想过滤掉任何包含任何排除字符串的文件名。我不知道怎么做。我知道我可以通过fileArray迭代并检查每个文件名,但这可能会影响性能......我猜对了,对吧?

这是仅使用第一个排除thumb作为过滤器的示例代码。现在我需要使用exclusion字符串数组的所有元素。此外,exclusion中使用的字符串是动态的,它不一定只有3个过滤条件。这只是一个例子。

        Dim ext() As String = Split(".jpg;.gif;.bmp;.tif;.png;.tiff;.jpeg", ";")
        Dim exclusion() As String = Split("thumb,nothing,empty", ",")

        Dim fileArray = From chkFile In Directory.EnumerateFiles(fpath, "*.*", SearchOption.TopDirectoryOnly)
                       Where ext.Contains(Path.GetExtension(chkFile).ToLower(System.Globalization.CultureInfo.InvariantCulture)) _
                        And Not Path.GetFileNameWithoutExtension(chkFile).ToLower(System.Globalization.CultureInfo.InvariantCulture).Contains(exclusion(0).Trim.ToLower)

1 个答案:

答案 0 :(得分:3)

这是使用FileInfo对象而不是字符串的一种方法。这消除了所有这些Path调用,但如果需要,应该很容易更改。

Dim ext() As String = {".jpg", ".gif", ".bmp", ".tif", ".png", ".tiff", ".jpeg"}
Dim exclusion() As String = {"thumb", "nothing", "empty"}
Dim fileArray = From chkFile As FileInfo In New DirectoryInfo(fpath).EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)
                Where ext.Contains(chkFile.Extension.ToLower(System.Globalization.CultureInfo.InvariantCulture)) _
                And Not exclusion.Any(Function(x) chkFile.Name.ToLower(System.Globalization.CultureInfo.InvariantCulture).Contains(x))
                Select chkFile