Ich muss einige Dateien zwischen einer Freigabe und einem Blob auf dem gleichen Speicherkonto verschieben. Nach einigem googleing ich mit diesem Code endete:Verschieben Sie Dateien zwischen Azure-Dateifreigabe und 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
Wenn die Löschleitungen das Ziel unkommentiert sind enthält alle Dateien im Quellordner aber mit 0 in der Größe.
Irgendwelche Ideen was mache ich falsch?
Ich möchte auch das Freigabeverzeichnis löschen, nachdem alle Dateien kopiert wurden. Gibt es eine Möglichkeit zu überprüfen, ob sich die Dateien im Zielordner befinden?
StartCopy() ist asynchrous, dessen Fertigstellung bedeutet nicht der Kopiervorgang beendet ist. Sie müssen danach den Kopierstatus im Ziel-Blob überprüfen. –
Nach einer anderen Antwort auf Stackoverflow (ich kann jetzt nicht finden), konnte ich nacheinander StartCopy() und Delete() ausführen und die Operationen werden synchron auf dem gleichen Konto ausgeführt. Ich habe das auch ausprobiert und die Dateien hatten 0 in der Größe. –