2016-12-15 31 views
0

我需要用填充字符串列表非空遞歸目錄路徑。c#用遞歸目錄路徑填充字符串列表

與此代碼我可以得到的目錄路徑和子文件夾的數量:

string path = Environment.ExpandEnvironmentVariables(@"f:\PAB\"); 
int directoryCount = System.IO.Directory.GetDirectories(@path).Length; 
string[] directoryArray = Directory.GetDirectories(path); 

我想填充一個新的列表字符串不是空目錄

我想也許我可以使用此代碼:

for (int i = 0; i < directoryCount; i++) 
{ 
    if (Directory.GetFiles(directoryArray[i]).Length != 0) 

但我完全新手與c#,我不konw我該怎麼做。

+2

您是否在尋找'SearchOption.AllDirectories'選項? 'string [] directoryArray = Directory.GetDirectories(@「f:\ PAB \」,「*」,SearchOption.AllDirectories);' –

+0

我不確定。子驅動器應該是空的或不是。在一個非空文件夾中有很多文件,我需要爲每個子文件夾取最新的兩個* .pdf。 PDF1和PDF2是相同的,但語言不同。我想合併每種語言的所有PDF1和PDF2。結果將是2個大文件。我也想重新創建索引,爲此,我可以使用iTextSharp讀取頁數。所以我只想把「不空」的子文件夾放在列表中。 – Roberto

+0

請問您是否可以將您的評論轉換成問題?由於您的問題不在尋找*目錄*,而是*特定文件*。 –

回答

1

我想填充一個新的列表字符串不是空目錄

如果佔非空目錄爲「絕對有文件」,那麼這可能是一個選項:

string path = @"yourpath"; 
List<string> non_empty_dirs = System.IO.Directory.GetDirectories(path, "*", SearchOption.AllDirectories) 
          .Where(x => Directory.GetFiles(x).Length != 0).ToList(); 

這將提取具有子文件夾的所有文件夾。

如果您只需要頂級目錄,請使用SearchOption.TopDirectoryOnly

如果非空表示「肯定有文件或有子文件夾」,您還需要包括這種過濾器到哪裏條件:

.Where(x => Directory.GetFiles(x).Length != 0 || 
      Directory.GetDirectories(x).Length != 0).ToList(); 
0

與此代碼解決:

字符串路徑=環境。 ExpandEnvironmentVariables(@ 「F:\ PAB \」); int directoryCount = System.IO.Directory.GetDirectories(@path).Length;

 List <string> nonEmptyDirectory = System.IO.Directory.GetDirectories(path, "*",SearchOption.AllDirectories).Where(x => Directory.GetFiles(x).Length != 0).ToList(); 
     int nonEmptyDirectoryCounter = nonEmptyDirectory.Count; 
     Console.WriteLine("Directory non vuote = {0}", nonEmptyDirectoryCounter); 
     foreach (string nonEmptyDirectoryValue in nonEmptyDirectory) 
     { 
      string fileFullPath = nonEmptyDirectoryValue; 
      var directory = new DirectoryInfo(nonEmptyDirectoryValue); 
      var orderedFiles = directory.EnumerateFiles("*.pdf").OrderByDescending(f => f.CreationTime); 
      var newestTwo = orderedFiles.Take(2).ToArray(); 
      var fullNames = newestTwo.Select(File => File.FullName).ToArray(); 

      Console.WriteLine(fullNames[0]); 
      Console.WriteLine(fullNames[1]); 

      PdfReader pdfReader1 = new PdfReader(fullNames[0]); 
      int numberOfPagesFile1 = pdfReader1.NumberOfPages; 
      PdfReader pdfReader2 = new PdfReader(fullNames[1]); 
      int numberOfPagesFile2 = pdfReader2.NumberOfPages; 

      totalItalianPages = totalItalianPages + numberOfPagesFile1; 
      totalGermanPages = totalGermanPages + numberOfPagesFile2; 

      Console.WriteLine("Numero pagine del documento1 pdf = {0}", numberOfPagesFile1); 
      Console.WriteLine("Numero pagine del documento2 pdf = {0}", numberOfPagesFile2); 
      Console.WriteLine("Numero totale pagine documento IT = {0}", totalItalianPages); 
      Console.WriteLine("Numero totale pagine documento DE = {0}", totalGermanPages); 



      Console.ReadKey(); 
     }