C# 从 Azure 检索 blob 列表

2023-12-14

我需要一些存档清理代码来在一定的保留期过后删除旧的 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(使用前将#替换为@)

C# 从 Azure 检索 blob 列表 的相关文章

随机推荐

  • 使用cmd在windows中设置环境变量

    要在 Windows 中启动我的项目 我必须使用以下命令在 cmd 中设置 java 环境变量 set JAVA HOME D Java jdk1 7 0 但它没有设置环境变量 我不知道问题是什么 等待几个小时后 我发现原因是由于两侧的空白
  • 为多人游戏提供良好的安全性

    我用eclipse做了一个游戏 我有一个服务器程序和一个客户端程序 客户端使用套接字与服务器进行通信 如果客户端启动 它将其用户名和密码发送到服务器 如果该组合存在 则客户端可以与服务器进行通信 而客户端不断读取游戏中其他人的等级并不断发送
  • Rails Admin - 删除相关对象

    我在用着导轨管理员在我的网站之一上 到目前为止 一切都很好 但我不知道如何从编辑页面中删除相关对象 例子 我有两个模型 Property 和 PropertyImage class Property has many property im
  • javafx如何禁用checkboxTreeItem中的一项?

    我是 JavaFX 新手 在复选框树视图中遇到问题 我想禁用根值中的一项 序列号但根据 JavaFX 文档 这似乎是不可能的 我禁用了点击效果cbTreeViewdisable treeItems 3 有没有办法将任何一个值变灰 或设置一个
  • firebase 数据库规则允许对具有特定信息的特定用户进行读/写

    我的 firebase 数据库规则如下 rules users uid read auth null root child users child auth uid child role val teacher write auth nul
  • 使用 Linq 或 Lambda 表达式检查复杂对象中的重复项

    我刚刚开始学习 linq 和 lambda 表达式 它们似乎非常适合在复杂的对象集合中查找重复项 但我有点困惑 希望有人可以帮助我回到快乐编码的道路上 我的对象的结构类似于 list list unique 客户标识符 我需要确保整个复杂对
  • 玩笑完成回调不可分配给 ProvidesCallback 或未定义类型的参数

    我正在尝试用笑话创建一个测试 我想使用done 回调但 Typescript 不接受它 我尝试使用 typeany jest DoneCallback或者不加任何类型但又不起作用 有什么解决方案或想法吗 it implements opti
  • 自动建议短语/句子完成

    我正在构建一个应用程序 我希望我的应用程序能够读取用户在输入文本框中输入的内容 并根据到目前为止的句子向用户提供两个事物 1 他们正在输入的可能短语列表 以便轻松自动完成 我猜我会使用预设的短语列表 我可以通过搜索来获得这些建议 2 根据句
  • PerformSelector 不工作

    MyThreadRun 方法是这样从 MyMethod 调用的 NSArray args NSArray arrayWithObjects arg1 target NSStringFromSelector mySelector nil NS
  • 单元测试 Zsh 完成脚本

    我正在尝试为 Zsh 编写一个完成脚本 我想对完成脚本进行单元测试 例如 我想测试完成情况my command h包括 help 对于鱼 我可以使用complete C my command h 然后会输出 help以及任何其他有效的完成情
  • 如何在两台具有公共IP但都位于LAN后面的机器之间进行通信(python解决方案)?

    正在寻找一个简单的 python 解决方案 假设机器A的本地IP是192 168 1 5 公共IP是111 11 111 11 机器B的本地IP是10 0 0 5 公共IP是222 22 222 22 现在我需要在这两台机器之间进行通信 你
  • 如何在 C 中更新 GTK+-3.0 中的标签

    我似乎无法使用该功能 gtk label set text 这就是我写的 include
  • 执行多重响应;如何从响应中读取和存储指南

    我正在使用 ExecuteMultipleResponse 方法使用 SSIS 一次插入 10 条帐户记录 List
  • 什么是算法摊销分析? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 它与渐近分析有何不同 你什么时候使用它 为什么 我读过一些似乎写得很好的文章 例如 http www ugrad cs ubc ca cs320 2010W2 handouts
  • 无法进行空手道测试

    我无法在我的功能中运行空手道测试 package api import com intuit karate junit4 Karate import org junit runner RunWith RunWith Karate class
  • Linux下如何删除包含其他子目录和文件的目录?

    我有一个包含文件和其他目录的目录 我需要在一个命令中删除所有内容 但如果我确定要删除 i 则无需询问我每个文件 有什么命令吗 您需要递归删除该文件夹 rm r folder name From rm help r R recursive r
  • 如何从Python中的列表构造矩阵?

    我是 Python 新手 我的问题是如何从一些列表构造矩阵 例如 如果我有列表 388 625 174 125 157 25 166 375 432 25 606 125 326 25 202 75 383 5 718 25 630 284
  • 如何将 pandas 方法作为参数传递?

    我有一个计算 pandas 数据框的列模式的函数 def my func df for col in df columns stat df col mode print stat 但我想让它更通用 以便我可以更改我计算的统计数据 例如mea
  • ggplot2 中的默认中断 - 图例指南和极坐标 y 轴标签的中断限制在哪里

    这本质上是一个后续问题ggplot 如何计算其默认中断 当我试图找到一个稍微更优雅的解决方案时 我遇到了这个如何在coord 极坐标图ggplot中添加y轴标签 显然 休息时间总是用以下方式计算scales extended breaks
  • C# 从 Azure 检索 blob 列表

    我需要一些存档清理代码来在一定的保留期过后删除旧的 Azure 日志 我知道我可以这样做 CloudStorageAccount storageAccount CloudStorageAccount Parse CloudBlobClien