2017-03-02 79 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_陈述。 –