private void BuildDirNode(CloudBlobDirectory cloudDir, DirNode dirNode) { foreach (IListBlobItem item in cloudDir.ListBlobs(false, BlobListingDetails.Metadata, HelperConst.DefaultBlobOptions)) { CloudBlob cloudBlob = item as CloudBlob; CloudBlobDirectory subCloudDir = item as CloudBlobDirectory; if (cloudBlob != null) { if (CloudBlobHelper.MapStorageBlobTypeToBlobType(cloudBlob.BlobType) == this.BlobType) { FileNode fileNode = new FileNode(cloudBlob.GetShortName()); this.BuildFileNode(cloudBlob, fileNode); dirNode.AddFileNode(fileNode); } } else if (subCloudDir != null) { var subDirName = subCloudDir.GetShortName(); DirNode subDirNode = dirNode.GetDirNode(subDirName); // A blob directory could be listed more than once if it's across table servers. if (subDirNode == null) { subDirNode = new DirNode(subDirName); this.BuildDirNode(subCloudDir, subDirNode); dirNode.AddDirNode(subDirNode); } } } }