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

问题描述 投票:-2回答:1

我的代码需要从我的Azure文件共享中获取一个List。

我可以从共享的属性中看到我在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

c# azure-storage
1个回答
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将返回值添加到files

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

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

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

如果你失去files.AddRange你应该是好的。

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

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