///<summary>Updates the blobs in a storage container.</summary> ///<param name="container">The container to update.</param> ///<param name="newVersion">The new version being uploaded.</param> ///<param name="sourcePath">The directory on the local disk containing the new files.</param> public static void UpdateStorage(CloudBlobContainer container, Version newVersion, string sourcePath) { container.FetchAttributes(); var remoteFiles = container.ListBlobs(Options).Cast<CloudBlob>().ToArray(); var oldBlobs = remoteFiles.ToDictionary( blob => Path.Combine(sourcePath, container.Uri.MakeRelativeUri(blob.Uri).ToString().Replace('/', '\\') ) ); var baseUri = new Uri(sourcePath, UriKind.Absolute); foreach (var file in new DirectoryInfo(sourcePath).EnumerateFiles("*", SearchOption.AllDirectories)) { CloudBlob blob; byte[] hash = file.SHA512Hash(); //If there already is a blob for this file, use it. if (!oldBlobs.TryGetValue(file.FullName, out blob)) { blob = container.GetBlobReference(baseUri.MakeRelativeUri(new Uri(file.FullName, UriKind.Absolute)).ToString()); } else { oldBlobs.Remove(file.FullName); //Remove the blob from the dictionary; all blobs left in the dictionary will be deleted. if (file.Length == blob.Properties.Length && Convert.FromBase64String(blob.Metadata["SHA512"]).SequenceEqual(hash)) continue; //If the blob is identical, don't re-upload it. } blob.Metadata["SHA512"] = Convert.ToBase64String(hash); blob.UploadFile(file.FullName); } foreach (var blob in oldBlobs.Values) blob.Delete(); container.Metadata["Version"] = newVersion.ToString(); container.SetMetadata(); }
/// <summary> /// Checks if a container exists. /// </summary> /// <param name="container">Container to check for</param> /// <returns>Flag indicating the existence of the container</returns> private static bool Exists(CloudBlobContainer container) { try { container.FetchAttributes(); return true; } catch (StorageClientException e) { if (e.ErrorCode == StorageErrorCode.ResourceNotFound) { return false; } else { throw; } } }
private bool ContainerExists(CloudBlobContainer container) { try { container.FetchAttributes(); } catch (StorageClientException) { return false; } return true; }