private void StartCopyFromFile(IStorageBlobManagement destChannel, CloudFile srcFile, string destContainerName, string destBlobName) { if (string.IsNullOrEmpty(destBlobName)) { destBlobName = srcFile.GetFullPath(); } CloudBlob destBlob = this.GetDestBlob(destChannel, destContainerName, destBlobName, BlobType.BlockBlob); this.StartCopyFromFile(destChannel, srcFile, destBlob); }
/// <summary> /// Write copy progress /// </summary> /// <param name="file">CloudFile instance</param> /// <param name="progress">Progress record</param> internal void WriteCopyProgress(CloudFile file, ProgressRecord progress) { if (file.CopyState == null) return; long bytesCopied = file.CopyState.BytesCopied ?? 0; long totalBytes = file.CopyState.TotalBytes ?? 0; int percent = 0; if (totalBytes != 0) { percent = (int)(bytesCopied * 100 / totalBytes); progress.PercentComplete = percent; } string activity = String.Format(Resources.CopyFileStatus, file.CopyState.Status.ToString(), file.GetFullPath(), file.Share.Name, file.CopyState.Source.ToString()); progress.Activity = activity; string message = String.Format(Resources.CopyPendingStatus, percent, file.CopyState.BytesCopied, file.CopyState.TotalBytes); progress.StatusDescription = message; OutputStream.WriteProgress(progress); }
private async Task StartAsyncCopy(long taskId, CloudFile destFile, Func<bool> checkOverwrite, Func<Task<string>> startCopy) { bool destExist = true; try { await destFile.FetchAttributesAsync(null, this.RequestOptions, this.OperationContext, this.CmdletCancellationToken); } catch (StorageException ex) { if (!ex.IsNotFoundException()) { throw; } destExist = false; } if (!destExist || checkOverwrite()) { string copyId = await startCopy(); this.OutputStream.WriteVerbose(taskId, String.Format(Resources.CopyDestinationBlobPending, destFile.GetFullPath(), destFile.Share.Name, copyId)); this.OutputStream.WriteObject(taskId, destFile); } }