1

我正在尝试重命名 Azure 文件。为此,我们必须先复制然后删除(因为没有重命名 API)。

鉴于此代码,删除是否总是在复制完成后开始?

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

我很困惑,因为Start......StartCopyAsyc就像......它会开始复制或其他东西......

另外,我没有做Task.WhenAll(both those tasks)...我认为会尝试同时做这些。

重要编辑:这是一个重命名,因此实际上,它将复制原始文件旁边的新文件:相同的共享、相同的容器、相同的目录..当然,所有这些都在同一个存储帐户中。

干杯!

4

1 回答 1

2

如果您只是重命名文件,那么您使用的代码应该可以正常工作。重命名本质上是在同一共享/目录中复制文件,然后删除。该复制操作是同步的。


但是,如果您要跨存储帐户复制文件,则复制操作是异步的,您必须等待复制操作完成,然后再对源文件采取任何进一步的操作(就像您要执行move操作一样)

对于以下代码执行完成且没有任何错误时的异步复制操作:

await destinationCloudFile.StartCopyAsync(sourceCloudFile); 

这意味着您复制 blob 的请求已被存储服务接受并已排队。通常复制发生得非常快,但不能保证。

您需要做的是定期检查复制操作是否已完成。这可以通过获取目标文件的属性来检查复制操作状态。

出于某种原因,我认为这将在存储客户端库中公开(我检查了版本 7.0.0)但它不存在 :(。但是您可以通过Get File PropertiesREST API 获取此信息。您可以检查x-ms-copy-status响应标头 ( pending, success,abortedfailed)。

编辑:在存储客户端 sdk(8.1.4 版)上有一个属性 CopyState,您可以检查副本的状态

于 2017-03-02T07:59:09.807 回答