2017-06-14 79 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:不客氣。修正了錯字 –

相關問題