【问题标题】:Getting all files in Azure file share (CloudFileDirectory)获取 Azure 文件共享 (CloudFileDirectory) 中的所有文件
【发布时间】:2019-08-17 04:13:13
【问题描述】:

我正在寻找一种 C# 方法,该方法将返回 Azure 文件共享中的所有文件(在所有子目录中)。

有一个例子,但它会引发运行时错误。我已经尝试了我从这里得到的下面的代码示例,但是它抛出了一个异常。

我已将代码粘贴到此处,但如果有人有一种方法可以遍历整个 Azure 目录,则可以获取很棒的文件。

CloudFileDirectory dir = fclient.GetShareReference(share.ToString()).GetRootDirectoryReference();

foreach (IListFileItem file in dir.ListFilesAndDirectories())   //.Directory.ListFilesAndDirectories())
{
    list_subdir(file);
}   

还有方法。

public static void list_subdir(IListFileItem list)
{
    Console.WriteLine("subdir");
    CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
    IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();

    foreach (IListFileItem listItem in fileList)
    {
        if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
        {
            list_subdir(listItem);
        }
        else
        {
            Console.WriteLine(listItem.Uri.Segments.Last());
        }
    }
}

" 在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__11.MoveNext() in C:\Program Files (x86)\Jenkins\workspace\dotnet-split-pr-master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 82 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.<>c__DisplayClass0_01.b__0() 中 C:\Program Files (x86)\Jenkins\workspace\dotnet-split-pr-master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 41

【问题讨论】:

    标签: c# azure azure-storage


    【解决方案1】:

    我安装了 nuget 包 WindowsAzure.Storage,版本 9.3.3。下面的代码对我来说很好,列出了子目录中的所有文件。

            static void Main(string[] args)
            {
                string accountName = "xxx";
                string key = "xxxx";
                var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, key), true);
                var share = storageAccount.CreateCloudFileClient().GetShareReference("testfolder");
                IEnumerable<IListFileItem> fileList = share.GetRootDirectoryReference().ListFilesAndDirectories();
                foreach (IListFileItem listItem in fileList)
                {
                    if (listItem.GetType() == typeof(CloudFile))
                    {
                        Console.WriteLine(listItem.Uri.Segments.Last());
                    }
                    else if(listItem.GetType() == typeof(CloudFileDirectory))
                    {
                        list_subdir(listItem);
                    }
                }
    
                Console.WriteLine("done now");
                Console.ReadLine();
            }
    
            public static void list_subdir(IListFileItem list)
            {
                //Console.WriteLine("subdir");
                CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
                IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
    
                foreach (IListFileItem listItem in fileList)
                {
                    if (listItem.GetType() == typeof(CloudFileDirectory))
                    {
                        list_subdir(listItem);
                    }
                    else
                    {
                        Console.WriteLine(listItem.Uri.Segments.Last());
                    }
                }
    
            }
    

    文件共享中的目录:

    根:

    子目录 1:

    子目录 2:

    测试结果:子目录下的所有文件都列出来了:

    【讨论】:

    • 感谢 Ivan,这确实适用于使用 VS2019 的 .net 4.6.1 控制台应用程序。我最初发布的错误是在 LINQPad5 中运行时。谢谢
    • 我想给我一份我共享的 17 个文件的列表,但是我现在拥有的代码重复计算了一些文件,所以我最终得到 29 个。知道我在做什么做错了吗?
    • 我将不得不将我的代码作为一个新问题发布,因为编辑我的原件似乎会弄乱代码格式。
    猜你喜欢
    • 2018-12-20
    • 2020-10-07
    • 1970-01-01
    • 2022-06-30
    • 2020-12-28
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多