【发布时间】:2020-08-30 18:55:06
【问题描述】:
我编写了下面的代码来遍历 Gen2 存储 blob
CloudStorageAccount sourceAccount = CloudStorageAccount.Parse(sourceConnection);
CloudStorageAccount destAccount = CloudStorageAccount.Parse(destConnection);
CloudBlobClient sourceClient = sourceAccount.CreateCloudBlobClient();
CloudBlobClient destClient = destAccount.CreateCloudBlobClient();
CloudBlobContainer sourceBlobContainer = sourceClient.GetContainerReference(sourceContainer);
// Find all blobs that haven't changed since the specified date and time
IEnumerable<ICloudBlob> sourceBlobRefs = FindMatchingBlobsAsync(sourceBlobContainer, transferBlobsNotModifiedSince).Result;
private static async Task<IEnumerable<ICloudBlob>> FindMatchingBlobsAsync(CloudBlobContainer blobContainer, DateTime transferBlobsNotModifiedSince)
{
List<ICloudBlob> blobList = new List<ICloudBlob>();
BlobContinuationToken token = null;
// Iterate through the blobs in the source container
do
{
BlobResultSegment segment = await blobContainer.ListBlobsSegmentedAsync(prefix: "", currentToken: token);
foreach (CloudBlobDirectory VARIABLE in segment.Results)
{
BlobResultSegment segment2 = await VARIABLE.ListBlobsSegmentedAsync(currentToken: token);
foreach (CloudBlobDirectory VARIABLE2 in segment2.Results)//Bad coding
{
//how do I get children count ?
}
}
}while (token != null);
}
这将只迭代 2 个级别,但不会动态地迭代到内部级别。我在下面的层次结构中有 blob
--Container
--FolderA
--FolderAA
--FolderAA1
--File1.txt
--File2.txt
--FolderAA2
--File1.txt
--File2.txt
--FolderAA3
--FolderAB
--File8.txt
--FolderAC
--File9.txt
这个层次结构是动态的
如何循环和复制 blob 内容。
注意:我不想使用CLI 命令来复制。因为一旦复制开始,我将无法控制。
更新
【问题讨论】:
-
您使用的是什么版本的 Storage .Net SDK?
-
我的版本 2.1.0
-
真的很老了:)。让我提供一个使用 SDK 版本 9.3.3 的解决方案。它们或多或少应该是兼容的。
-
实际上我找到了很久以前写的答案。关闭这个作为那个的副本。请看一下,如果这不能解决您的问题,请要求重新打开。 HTH。
-
添加了列出 Blob 容器中所有 Blob 的示例代码。