【问题标题】:How to get all files which is inside sub-folders in azure file share storage c#?如何获取 azure 文件共享存储 c# 中子文件夹内的所有文件?
【发布时间】:2018-12-20 16:36:49
【问题描述】:

我想复制子文件夹中的所有文件。

文件夹结构-

Source\Folder1\Data\file1.txt

Source\Folder1\Data\file2.txt

Source\Folder1\Data\Temp1\temp1.txt

Source\Folder1\Data\Temp1\temp2.​​txt

我有以下代码,但我只收到root and its sub-folders not inside it

我想要递归代码。感谢@Compufreak 提供递归代码 我仍然无法复制文件,因为源是源文件夹不是最新的。

public static void list_file()
{
    //***** Get list of all files/directories on the file share*****//
    CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
    CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
    CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);

    IEnumerable<IListFileItem> fileList = fileShare.GetRootDirectoryReference().ListFilesAndDirectories(ConfigurationManager.AppSettings["sourceName"]);

    CloudFileDirectory rootDir = fileShare.GetRootDirectoryReference();
    CloudFileDirectory sourceDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["sourceName"]);
    CloudFileDirectory destinationDir = rootDir.GetDirectoryReference(ConfigurationManager.AppSettings["destinationName"]);

    // Print all files/directories listed above.
    foreach (IListFileItem listItem in fileList)
    {
        // listItem type will be CloudFile or CloudFileDirectory.
        Console.WriteLine(listItem.Uri.Segments.Last());
        Console.WriteLine(listItem.GetType());
        if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
        {
            list_subdir(listItem, sourceDir, destinationDir);
        }
    }
}

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

    // Print all files/directories in the folder.
    foreach (IListFileItem listItem in fileList)
    {
        // listItem type will be CloudFile or CloudFileDirectory.
        if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
        {
            list_subdir(listItem,sourceDir,destinationDir);
        }
        else
        {
            Console.WriteLine(listItem.Uri.Segments.Last());
            // move file to destination
            // Get a reference to the file we created previously.
            CloudFile sourceFile = sourceDir.GetFileReference(listItem.Uri.Segments.Last());

            // Ensure that the source file exists.
            if (sourceFile.Exists())
            {
                // Get a reference to the destination file.
                CloudFile destFile = destinationDir.GetFileReference(listItem.Uri.Segments.Last());

                // Start the copy operation.
                destFile.StartCopy(sourceFile);

                // Write the contents of the destination file to the console window.
                Console.WriteLine(destFile.DownloadText());
            }
        }
    }
}

【问题讨论】:

    标签: c# azure-storage fileshare


    【解决方案1】:

    我建议在这里使用递归(如果是目录,我在 list_subdir 中添加了对 list_subdir 的调用):

    public static void list_subdir(IListFileItem list)
        {
            Console.WriteLine("subdir");
            CloudFileDirectory fileDirectory = (CloudFileDirectory)list;
            IEnumerable<IListFileItem> fileList = fileDirectory.ListFilesAndDirectories();
    
            // Print all files/directories in the folder.
            foreach (IListFileItem listItem in fileList)
            {
                // listItem type will be CloudFile or CloudFileDirectory.
                if (listItem.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFileDirectory))
                {
                    list_subdir(listItem);
                } else {
                    Console.WriteLine(listItem.Uri.Segments.Last());
                }
            }
     }
    

    【讨论】:

      猜你喜欢
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 2018-04-02
      • 2022-07-08
      • 1970-01-01
      • 2016-09-15
      • 2013-11-26
      相关资源
      最近更新 更多