2017-06-14 65 views
1

的具体名称我一直在努力:Directory.getfiles():文件C#

  • 阅读从一个特定的文件夹中的所有文件;
  • 只选择与特定模式名称+的.csv

什么我结束那些至今:

   string[] fileEntriesout = System.IO.Directory.GetFiles(dir + "\\" + "output\\", "*.csv*", System.IO.SearchOption.AllDirectories); 

这是工作很好,但它得到所有.CSVs文件;

我试了一下:

   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(); 

我想我找到了,但没有人似乎工作不同的想法。

总结:

  1. 我需要的String []得到所有的.CSVs包含(通常在文件名的末尾)文件的名称:“_FV”或“_body”或“_out ”。

谢谢。

+1

当你正在形成路径时,使用'Path.Combine'方法。默认情况下,路径分隔符是'\\'字符。 – dcg

回答

2

使用LINQEnumerateFiles代替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有overoad如果你想忽略的情况下,需要一个StringComparison,(FE允许_Body太):

EndsWith(ex, StringComparison.InvariantCultureIgnoreCase) 
+0

它正在工作! ,我所做的唯一的变化是: Path.GetFilenameWithoutExtension到Path.GetFileNameWithoutExtension (大写N) 谢谢! –

+0

@FabioFreitas:不客气。修正了错字 –

相关问题