首页 > 解决方案 > .NET Core:IFileProvider.GetDirectoryContents 递归不起作用

问题描述

我想扫描一个目录(“C:/test”)并递归获取所有文件.pdf我创建一个这样的提供程序:

IFileProvider provider = new PhysicalFileProvider("C:/test"); // using config in my code and also tried with "C:/test/"

我在目录和子目录中放置了一些pdf

有一个带有此路径的文件: C:/test/pdf59.pdf 另一个带有 C:/test/testComplexe/pdf59.pdf

在我尝试这些行的地方,它们都返回 "NotFoundDirectoryException" :

provider.getDirectoryContents(@"**")
provider.getDirectoryContents(@"*")
provider.getDirectoryContents(@"*.*")
provider.getDirectoryContents(@"**.*")    
provider.getDirectoryContents(@"pdf59.pdf")
provider.getDirectoryContents(@"*.pdf")

此行例外:

provider.getDirectoryContents(@"testComplexe")

我如何查询这些递归目录和文件?谢谢

标签: c#asp.net-core.net-core.net-standard

解决方案


您可以编写自己的递归函数。

var files = new List<IFileInfo>();
GetFiles("C:/Tests", files);

private void GetFiles(string path, ICollection<IFileInfo> files)
{
    IFileProvider provider = new PhysicalFileProvider(path);

    var contents = provider.GetDirectoryContents("");

    foreach (var content in contents)
    {
        if (!content.IsDirectory && content.Name.ToLower().EndsWith(".pdf"))
        {
            files.Add(content);
        }
        else
        {
            GetFiles(content.PhysicalPath, files);
        }
    }
}

推荐阅读