2017-03-02 82 views
0

我正在嘗試重命名Azure文件。 要做到這一點,我們必須複製然後刪除(因爲沒有重命名API)。當複製然後刪除Azure文件時,複製完成後刪除總是會啓動嗎?

鑑於此代碼,DELETE總是在之後啓動COPY已完成?

await destinationCloudFile.StartCopyAsync(sourceCloudFile); 
await sourceCloudFile.DeleteAsync(); 

StartCopyAsyc因爲這個詞Start的很困惑...如..它會開始複製或東西...

另外,我不是做Task.WhenAll(both those tasks)。 ..我會假設會試圖在同一時間做這些。

重要編輯:這是一個重命名,因此,實際上,它會複製新文件旁邊原始文件:同股,同一個容器中,同一個目錄..當然,都在同一個存儲帳戶。

乾杯!

+1

您migth想讀這:https://blogs.msdn.microsoft.com/windowsazurestorage/2012/06/12/introducing-asynchronous-cross-account-copy-blob/(section 「複製現在是異步的」)。也是這樣的答案:http://stackoverflow.com/a/21340397/5311735 – Evk

回答

1

如果您只是重命名文件,那麼您使用的代碼應該可以正常工作。重命名本質上是複製一個共享/目錄中的文件,然後進行刪除。該複製操作是同步的。


不過,如果你是跨存儲帳戶的複製文件,然後複製操作是異步的,你必須等待複製操作採取對源文件的任何進一步行動之前完成(如要執行一move操作)

對於異步複製操作時,下面的代碼完成沒有任何錯誤執行:

await destinationCloudFile.StartCopyAsync(sourceCloudFile); 

這是什麼意思是,你的要求複製的blob已被存儲Servi大街接受並已排隊。通常複製發生得非常快,但沒有保證。

您需要做的是定期檢查複製操作是否已完成。這可以通過獲取目標文件的屬性來檢查複製操作狀態。由於某種原因,我認爲這將暴露在存儲客戶端庫(我檢查版本7.0.0),但它不存在:(但您可以通過Get File Properties REST API獲取此信息。您可以檢查x-ms-copy-status響應頭(pendingsuccessabortedfailed

編輯:在存儲客戶端SDK(版本8.1.4)有一個屬性CopyState您可以檢查副本的狀態

+0

嗨@gaurav - 我實際上是從'test.txt'重命名文件到'test.txt.lock',在同一個容器+目錄。 –

+0

然後它會是同步的。對不起,應該仔細閱讀這個問題:)。 –

+0

對不起 - 我應該有_explicity_陳述。 –