2016-04-22 6 views
0

私はAzure Blobからデータを読み込み、そのデータをObjectに保存しているプロジェクトに取り組んでいます。私は現在問題に遭遇しています。私のコードが今設定されている方法 - バーチャルフォルダがない場合、コンテナ内のすべての.txtデータを読み込みます。Azure Containerに仮想フォルダ/ディレクトリがあるかどうかを確認するには?

しかし、Azureコンテナ内に仮想フォルダ構造が存在する場合、 NullExceptionReferenceを使用すると、自分のコードがエラーになります。私の考えは、if Azureコンテナ内に仮想フォルダが存在するかどうかを調べて、//some codeを実行するかどうかをチェックすることでした。仮想フォルダが存在するかどうかを確認する方法はありますか?


ReturnBlobObject()

private List<Blob> ReturnBlobObject(O365 o365) 
    { 
     List<Blob> listResult = new List<Blob>(); 
     string textToFindPattern = "(\\/)"; 
     string fileName = null; 
     string content = null; 

     //Loop through all Blobs and split the container form the file name. 
     foreach (var blobItem in o365.Container.ListBlobs(useFlatBlobListing: true)) 
     { 
      string containerAndFileName = blobItem.Parent.Uri.MakeRelativeUri(blobItem.Uri).ToString(); 
      string[] subString = Regex.Split(containerAndFileName, textToFindPattern); 

      //subString[2] is the name of the file. 
      fileName = subString[2]; 
      content = ReadFromBlobStream(o365.Container.GetBlobReference(subString[2])); 

      Blob blobObject = new Blob(fileName, content); 

      listResult.Add(blobObject); 
     } 

     return listResult; 
    } 

ReadFromBlobStream

private string ReadFromBlobStream(CloudBlob blob) 
    { 
     Stream stream = blob.OpenRead(); 
     using (StreamReader reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 

答えて

0

私は私のコードをリファクタリングすることによって、これを解決することができました。 Regexを使用する代わりに、私はいくつかの非常に奇妙な行動を戻していました。私は一歩踏み出して、問題を考えることにしました。以下は私が思いついた解決策です。

ReturnBlobObject()

private List<Blob> ReturnBlobObject(O365 o365) 
    { 
     List<Blob> listResult = new List<Blob>(); 

     //Loop through all Blobs and split the container form the file name. 
     foreach (var blobItem in o365.Container.ListBlobs(useFlatBlobListing: true)) 
     { 
      string fileName = blobItem.Uri.LocalPath.Replace(string.Format("/{0}/", o365.Container.Name), ""); 
      string content = ReadFromBlobStream(o365.Container.GetBlobReference(fileName)); 

      Blob blobObject = new Blob(fileName, content); 

      listResult.Add(blobObject); 
     } 

     return listResult; 
    }