Reputation: 1908
Is there a way to exclude files from Directory.EnumerateFiles based on multiple criteria?
The filtering based on extension works fine. But I also want to filter out any filenames which contain any of the exclusion strings. I'm not sure how to do it. I know I could iterate thru the fileArray and check each filename, but that would probably be a performance hit...I'm guessing, right?
This is example code which only uses the first exclusion thumb
as a filter. Now I need to use all elements of the exclusion
string array. Also, the string used in exclusion
is dynamic, it won't necessarily have just the 3 filter criteria. This is just an example.
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)
Upvotes: 0
Views: 1039
Reputation: 6948
Here's one way that uses FileInfo objects instead of strings. This eliminates all those Path calls, but should be easy to change if desired.
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
Upvotes: 3