0
我必须在同一存储帐户上的共享和blob之间移动某些文件。 一些googleing我结束了这段代码后:在azure文件共享和blob之间移动文件
CloudFileClient fileClient = account.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("shareName");
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory videoDirectory = rootDir.GetDirectoryReference(video.StoragePath);
CloudBlobClient blobClient = account.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(video.StoragePath);
container.CreateIfNotExists();
foreach (var Files in videoDirectory.ListFilesAndDirectories())
{
var arr = Files.Uri.ToString().Split('/');
string strFileName = arr[arr.Length - 1];
CloudFile sourceFile = videoDirectory.GetFileReference(strFileName);
string fileSas = sourceFile.GetSharedAccessSignature(new SharedAccessFilePolicy()
{
Permissions = SharedAccessFilePermissions.Read,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24)
});
Uri fileSasUri = new Uri(sourceFile.StorageUri.PrimaryUri.ToString() + fileSas);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(strFileName);
blockBlob.StartCopyAsync(fileSasUri).Wait(); //copy the file to blob storage and wait for the operation to complete
//sourceFile.DeleteAsync(); //delete the file
}
//videoDirectory.DeleteAsync(); //delete the directory
如果删除行注释掉的目标包含在源文件夹,但在大小为0的所有文件。
任何想法我做错了什么?
我也想删除所有文件复制后的共享目录。有没有办法检查文件是否在目标文件夹中?
StartCopy()是asynchrous,它的完成并不意味着复制过程完成。之后您需要检查目标blob中的复制状态。 –
根据stackoverflow上的另一个答案(我现在找不到),我可以一个接一个地执行StartCopy()和Delete(),并且这些操作将在同一个帐户上同步运行。我也试过,文件大小为0。 –