Fabio Soares
Fabio Soares

Reputation: 101

Directory.getfiles(): specific names of files c#

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:

  1. I need that string[] gets all the .CSVs files that contain (usually at the end of the file name) the names: "_fv" or "_body" or "_out".

Thank you.

Upvotes: 1

Views: 1348

Answers (1)

Tim Schmelter
Tim Schmelter

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

Related Questions