.NET Core:IFileProvider.GetDirectoryContents递归不起作用

问题描述 投票:0回答:2

我想扫描一个目录(“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

在我尝试这些行的地方,它们都返回“NotFound DirectoryException”:

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
2个回答
1
投票

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

    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);
            }
        }
    }

0
投票

要获取根文件夹(“C:/ test /”)的内容,请以这种方式使用提供程序:

var contents = provider.getDirectoryContents("")

然后,你必须在contents中枚举结果,并为每个人做你想做的事。

文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/file-providers?view=aspnetcore-2.1

© www.soinside.com 2019 - 2024. All rights reserved.