有没有办法根据多个条件从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)
答案 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