동일한 스토리지 계정에있는 공유와 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, 그 완성은 복사 프로세스가 완료 의미하지 않습니다. 그 후에 대상 블롭의 복사 상태를 검사해야합니다. –
stackoverflow에 대한 또 다른 대답 (나는 지금 찾을 수 없다)에 따르면 StartCopy()와 Delete()를 차례로 수행 할 수 있고 동일한 계정에서 작업이 동 기적으로 실행됩니다. 나는 또한 그것을 시도하고 파일 크기가 0했다. –