2016-07-22 66 views
1

递归获取文件,我想编写一个程序来从蔚蓝的文件存储的文件,但问题是没有定义的目录深度和文件的isFile属性始终返回false。目录从蔚蓝的文件存储使用C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using Microsoft.Azure; // Namespace for Azure Configuration Manager 
using Microsoft.WindowsAzure.Storage; // Namespace for Storage Client Library 
using Microsoft.WindowsAzure.Storage.Blob; // Namespace for Blob storage 
using Microsoft.WindowsAzure.Storage.File; // Namespace for File storage 

namespace AzureStorage 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

      //CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Create a CloudFileClient object for credentialed access to File storage. 
      CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); 

      // Get a reference to the file share we created previously. 
      CloudFileShare share = fileClient.GetShareReference("my-FileShare"); 

      // Ensure that the share exists. 
      if (share.Exists()) 
      { 
       // Get a reference to the root directory for the share. 
       CloudFileDirectory rootDir = share.GetRootDirectoryReference(); 


       // Get a reference to the directory we created previously. 
       CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("FILES"); 

       // Ensure that the directory exists. 
       if (sampleDir.Exists()) 
       { 
        var directoryLists = sampleDir.ListFilesAndDirectories(); 
        //sampleDir.ge 
        foreach (var yearDirTemp in directoryLists) 
        { 
         var yearDir = sampleDir.GetDirectoryReference(
             Path.GetFileNameWithoutExtension(yearDirTemp.Uri.LocalPath) 
             ); 
         foreach (var monthDirTemp in yearDir.ListFilesAndDirectories()) 
         { 
          var monthDir = yearDir.GetDirectoryReference(
              Path.GetFileNameWithoutExtension(monthDirTemp.Uri.LocalPath) 
              ); 
          foreach (var patientDirTemp in monthDir.ListFilesAndDirectories()) 
          { 
           var patientDir = monthDir.GetDirectoryReference(
                Path.GetFileNameWithoutExtension(patientDirTemp.Uri.LocalPath) 
                ); 
           foreach (var patientDataTemp in patientDir.ListFilesAndDirectories()) 
           { 
            var patientData = patientDir.GetDirectoryReference(
                Path.GetFileNameWithoutExtension(patientDataTemp.Uri.LocalPath) 
                ); 

            var fileList = patientData.ListFilesAndDirectories(); 
            foreach(var fileTemp in fileList) 
            { 
             // Here fileTemp could be file 
             // or directory containing more child directories 
             var file1 = patientData.GetFileReference(Path.GetFileName(fileTemp.Uri.LocalPath)); 
             file1.FetchAttributes(); 
             byte[] arrTarget = new byte[file1.Properties.Length]; 
             file1.DownloadToByteArray(arrTarget, 0);           
            } 

           } 
          } 

         }       
        } 
       } 
      } 
     } 
    } 
} 
+0

请分享您的代码。 –

回答

1

深度没有定义和文件的ISFILE属性始终返回false。

如果您想在fileTemp为File时执行一些操作,请使用以下代码尝试。我们可以使用GetType方法来获取它的类型,然后使用name属性来获取它的类型值。如果该值为“CloudFile”,那么我们会执行一些操作,例如下载等。

foreach (var fileTemp in fileList) 
{ 
    // Here fileTemp could be file 
    // or directory containing more child directories 
    switch (fileTemp.GetType().Name) 
    { 
     case "CloudFile": 
      var file1 = patientData.GetFileReference(Path.GetFileName(fileTemp.Uri.LocalPath)); 
      file1.FetchAttributes(); 
      byte[] arrTarget = new byte[file1.Properties.Length]; 
      file1.DownloadToByteArray(arrTarget, 0); 
      break; 
     case "CloudFileDirectory": 
      break; 
    } 

} 
1
public static void list_file() 
    { 
     //***** Get list of all files/directories on the file share*****// 
     CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("xxxxxxxxxxxxxxxxxxxxxx_AzureStorageConnectionString")); 
     CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient(); 
     CloudFileShare fileShare = fileClient.GetShareReference("dummyfile"); 

     // List all files/directories under the root directory. 
     Console.WriteLine("Getting list of all files/directories under the root directory of the share."); 

     IEnumerable<IListFileItem> fileList = fileShare.GetRootDirectoryReference().ListFilesAndDirectories(); 

     // 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); 
      } 
     } 
    } 
    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. 
      Console.WriteLine(listItem.Uri.Segments.Last()); 
     } 
    } 
+0

在这个程序中,显示目录及其相应的子文件夹。 –

+0

执行上述程序的步骤是:获取共享根目录下的所有文件/目录列表。 DIR Microsoft.WindowsAzure.Storage.File.CloudFileDirectory 子目录 文件%201.txt Microsoft.WindowsAzure.Storage.File.CloudFile MYDIR Microsoft.WindowsAzure.Storage.File.CloudFileDirectory 子目录 note.txt 新闻任何关键要继续。 。 。 –

+0

的输出是: [1]:https://i.stack.imgur.com/eNEq4.png –