如何获取 azure 文件共享存储 c# 中子文件夹内的所有文件?

How to get all files which is inside sub-folders in azure file share storage c#?

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

文件夹结构-

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

我建议在这里使用递归(如果是目录,我在 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());
            }
        }
 }