2016-12-15 89 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(); 
     }