如何使用Azure Storage SDK将Azure文件存储上的文件从一个子文件夹移动到另一个子文件夹?

时间:2016-09-19 14:03:38

标签: c# .net azure azure-storage azure-storage-files

我试图弄清楚如何将Azure文件存储中的文件从一个位置移动到同一个共享中的另一个位置。

E.g。

source -> \\Share1\someFile.txt
destination -> \\Share1\Foo\Bar\someFile.txt
  • 我是否需要先复制文件,然后删除源?
  • 如果目标子目录不存在怎么办?我需要先为每个子目录CreateIfNotExistsAsync吗?

喝彩!

6 个答案:

答案 0 :(得分:5)

这是documented in the Getting Started guide on Azure Storage Files参考。

您需要的是将文件从一个位置复制到另一个位置的StartCopy方法。

// Start the copy operation.
destinationFile.StartCopy(sourceFile);

并且,是的,如果目标目录不存在,则必须创建目标目录。

答案 1 :(得分:3)

不幸的是,我们没有通过客户端SDK所依赖的REST API公开移动/重命名功能。您当然可以通过SMB执行这些功能。我们在积压工作中确实拥有这些功能,但尚未制定实施时间表。

答案 2 :(得分:2)

赞:

onkey()

答案 3 :(得分:2)

以下是带有新blob API的Asp.net Core 3+的更新答案。您可以将BlockBlobClientStartCopyFromUriAsync一起使用,如果要等待完成WaitForCompletionAsync

struct Countries : Codable {
    var Countries : [Country]
}

或者如果您不需要等待完成而只想“解雇”。

struct Countries : Codable {
    var countries : [Country]
    enum CodingKeys: String, CodingKey {
         case countries = "Countries"
    }
}

答案 4 :(得分:1)

Azure存储文件共享是SMB兼容的共享。因此,您应该能够使用正常的文件I / O操作进行文件复制/移动。这与直接blob操作形成对比,后者需要通过Storage API专门创建容器,启动blob副本等。

答案 5 :(得分:-2)

Azure blob子控制器是一个虚拟功能,因为它们实际上不存在,blob /文件的名称包含完整路径。因此,您不必明确“创建”目录。

我不认为Azure blob /文件存在原子“重命名”方法...要解决它,你必须复制(使用新名称)然后删除原始文件。