我需要一些存档清理代码来在一定的保留期过后删除旧的 Azure 日志。
我知道我可以这样做:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("ctr");
var blobList = container.ListBlobs();
foreach(var blob in blobList)
{
logger.Info($"Blob Name: {blob.Uri}");
}
然而在我的容器内结构是
/
/year/month/day/hour/files
所以现在有
/2017/5/11/14/files
/2017/5/11/17/files
/2017/5/11/22/files
/2017/5/11/23/files
and
/2017/5/12/11/files
其中files是多个备份文件。
for 循环的集合中只有 1 项,因为 2017 文件夹是根文件夹。
有没有办法检索所有斑点?
最终目标是删除所有早于保留期的 blob。
尝试这个模式。浏览大存储空间时可以很方便。我发现它对 GC 和内存占用更加友好
var blobAccount = "<account>";
var apiKey = "<api-key>";
var containerName = "<container>";
var storageCredentials = new StorageCredentials(blobAccount, apiKey);
var account = new CloudStorageAccount(storageCredentials, true);
var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blobLimit = 500
if (container == null) { return; }
var blobContinuationToken = new BlobContinuationToken();
using (var fs = new FileStream("Output.csv", FileMode.Create))
{
var sw = new StreamWriter(fs);
sw.WriteLine("Type,Name,Length");
BlobContinuationToken continuationToken = null;
do
{
var blobList = container.ListBlobsSegmented("",
true,
BlobListingDetails.Metadata,
blobLimit,
continuationToken,
new BlobRequestOptions
{
LocationMode = LocationMode.PrimaryOnly
},
null);
continuationToken = blobList.ContinuationToken;
// I was looking only for BlockBlobs
foreach (var item in blobList.Results.OfType<CloudBlockBlob>())
{
sw.WriteLine($"block,\"{item.Name}\",{item.Properties.Length}");
}
} while (continuationToken != null);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)