c#用递归目录路径填充字符串列表
问题描述:
我需要用填充字符串列表非空递归目录路径。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我该怎么做。
答
我想填充一个新的列表字符串不是空目录
如果占非空目录为“绝对有文件”,那么这可能是一个选项:
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();
答
与此代码解决:
字符串路径=环境。 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();
}
您是否在寻找'SearchOption.AllDirectories'选项? 'string [] directoryArray = Directory.GetDirectories(@“f:\ PAB \”,“*”,SearchOption.AllDirectories);' –
我不确定。子驱动器应该是空的或不是。在一个非空文件夹中有很多文件,我需要为每个子文件夹取最新的两个* .pdf。 PDF1和PDF2是相同的,但语言不同。我想合并每种语言的所有PDF1和PDF2。结果将是2个大文件。我也想重新创建索引,为此,我可以使用iTextSharp读取页数。所以我只想把“不空”的子文件夹放在列表中。 – Roberto
请问您是否可以将您的评论转换成问题?由于您的问题不在寻找*目录*,而是*特定文件*。 –