Reputation: 101
I have been trying to:
What to I have so far:
string[] fileEntriesout = System.IO.Directory.GetFiles(dir + "\\" + "output\\", "*.csv*", System.IO.SearchOption.AllDirectories);
This is working well but it gets all the .CSVs files;
What I tried:
string[] extensions = { "_fv", "_body", "_out" };
string[] fileEntriesout = Directory.GetFiles(dir + "\\" + "output\\", "*.csv*", System.IO.SearchOption.AllDirectories).Where(f => extensions.Contains(System.IO.Path.GetFileNameWithoutExtension(f).ToLower())).ToArray();
string[] fileEntriesout = System.IO.Directory.GetFiles(dir + "\\" + "output\\", "*.*", System.IO.SearchOption.AllDirectories).Where(f => nextensions.Contains(new FileInfo(f).Extension.ToLower())).ToArray();
string[] fileEntriesout = System.IO.Directory.GetFiles(dir + "\\" + "output\\", "*.*", System.IO.SearchOption.AllDirectories).Where(f => nextensions.Contains(new FileInfo(f).Name.ToLower())).ToArray();
string[] fileEntriesout = System.IO.Directory.GetFiles(dir + "\\" + "output\\", "*.*", System.IO.SearchOption.AllDirectories).Where(f => nextensions.Contains(new FileInfo(f).Extension.ToLower())).ToArray();
I tried different ideas that I found but none of them seem to work.
Summing up:
Thank you.
Upvotes: 1
Views: 1348
Reputation: 460340
Use LINQ
and EnumerateFiles
instead of GetFiles
+ Path.GetFilenameWithoutExtension
:
string[] extensions = { "_fv", "_body", "_out" };
string[] fileEntriesout = System.IO.Directory.EnumerateFiles(dir + "\\" + "output\\", "*.csv", System.IO.SearchOption.AllDirectories)
.Where(file => extensions.Any(ex => Path.GetFileNameWithoutExtension(file).EndsWith(ex)))
.ToArray();
String.EndsWith
has an overoad that takes a StringComparison
, if you want to ignore the case(f.e. allow _Body
too):
EndsWith(ex, StringComparison.InvariantCultureIgnoreCase)
Upvotes: 2