如何获取此代码以仅从Azure文件共享中获取文件?

时间:2019-03-27 15:33:38

标签: c# azure-storage

我下面的代码需要从Azure文件共享中获取列表。

从共享的属性中可以看到,我在5个文件夹中有17个文件,但是此代码返回29。

此处显示的示例代码,不确定在允许我发布之前该编辑器要添加多少额外的文本。

 class Program
    {
        private static List<CloudFile> files = new List<CloudFile>();

    static void Main(string[] args)
    {
        int xxx = 0;
        string accountName = "#######";
        string key = "#######";
        var storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, key), true);
        var share = storageAccount.CreateCloudFileClient().GetShareReference("xfer");
        IEnumerable<IListFileItem> fileList = share.GetRootDirectoryReference().ListFilesAndDirectories();



        foreach (IListFileItem listItem in fileList)
        {
            if (listItem.GetType() == typeof(CloudFile))
            {
                files.Add((CloudFile)listItem);
            }
            else if (listItem.GetType() == typeof(CloudFileDirectory))
            {
               files.AddRange(list_subdir(listItem));
            }
        }

    }

    public static List<CloudFile>  list_subdir(IListFileItem list)
    {
        CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
        IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();

        foreach (IListFileItem listItem in fileList)
        {
            if (listItem.GetType() == typeof(CloudFileDirectory))
            {
                list_subdir(listItem);
            }
            else
            {
                if (listItem.GetType() == typeof(CloudFile))
                {
                    files.Add((CloudFile) listItem);
                }
            }
        }
        return files;
    }


}

enter image description here

1 个答案:

答案 0 :(得分:1)

您的问题出在files.AddRange上。这是正在发生的事情: 假设您的根目录有两个文件,A和B,以及文件夹Foo。 Foo依次包含文件C,D和E。

您的代码找到Foo并调用list_subdir。此时files仍然为空。您在list_subdir中的循环找到C,D和E,并将其添加到files。此时files包含C,D和E。现在list_subdirfiles返回到Main内的循环,其中AddRange将返回值添加到{ {1}}。

现在files包含C,D,E,C,D和E。

循环继续并添加A和B,使files的内容为C,D,E,C,D,E,A,B

瞧。 8个文件,而不是预期的5个。

如果你输了files,那你应该很好。

顺便说一句,Visual Studio允许您将本地调试器附加到Azure上的应用程序,这使调试服务器端代码变得轻而易举。