簡體   English   中英

如何獲取azure文件共享存儲c#中子文件夾內的所有文件?

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

我想復制子文件夾中的所有文件。

文件夾結構 -

源\\Folder1\\Data\\file1.txt

源\\Folder1\\Data\\file2.txt

源\\Folder1\\Data\\Temp1\\temp1.txt

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM