2016-04-22 7 views
0

Ich arbeite an einem Projekt, das die Daten von einem Azure Blob liest und diese Daten in einem Objekt speichert. Ich stoße gerade auf ein Problem. Die Art, wie mein Code jetzt eingerichtet ist - er liest alle .txt-Daten in einem Container, wenn keine virtuellen Ordner vorhanden sind.Wie kann ich feststellen, ob Azure Container über virtuelle Ordner/Verzeichnisse verfügt?

Wenn jedoch eine virtuelle Ordnerstruktur in einem Azure Container vorhanden ist, wird mein Code mit einer NullExceptionReference Fehler aus. Meine Idee war, eine if Prüfung zu machen, um zu sehen, ob es virtuelle Ordner innerhalb eines Azure Containers gab, wenn das so ausgeführt wurde //some code. Gibt es eine Möglichkeit zu sagen, ob ein virtueller Ordner vorhanden ist?


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

Antwort

0

Ich konnte dies mein Code durch Refactoring lösen. Anstatt Regex zu benutzen - was ein sehr merkwürdiges Verhalten zeigte - entschied ich mich, einen Schritt zurück zu machen und über das Problem nachzudenken. Unten ist die Lösung, die ich gefunden habe.

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; 
    } 
Verwandte Themen