c# - 如何下载和读取 Azure Blob 容器文件
问题描述
我需要从 Azure blob 容器中下载所有文件,然后逐个读取文件以查找所有 ASCII 字符值的总和。
解决方案
下面是在 C# 中下载和读取 Azure Blobs 容器文件的示例。您将需要创建函数async-await
来连接 Azure Blobs 容器并在本地下载 Blob 文件以读取这些文件并“做某事”。在示例中,我们找到大小正好为 11Kbytes
的小丑文件,并对小丑文件和其他文件中每个字符的 ASCII 值求和,最后将小丑文件的 ASCII 值与其他文件的 ASCII 值相乘。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
namespace myApp
{
class Program
{
static async Task Main(string[] args)
{ /**********************************************************************************************
* Sum the ASCII value - find the joker (228326687915660 = 329081602*693830)
***********************************************************************************************/
Uri blobContainerUri = new Uri("blob-container-uri-find-the-joker");
BlobContainerClient blobContainerClient = new BlobContainerClient(blobContainerUri, null);
string localPath = "./data/";
ulong sumASCIIValue = 0ul;
ulong sumJokerASCIIValue = 0ul;
await foreach (var blob in blobContainerClient.GetBlobsAsync())
{
string fileName = blob.Name;
string localFilePath = Path.Combine(localPath, fileName);
using (var file = File.Open(localFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
var blobClient = blobContainerClient.GetBlobClient(blob.Name);
await blobClient.DownloadToAsync(file);
if (file.CanRead)
{
file.Position = 0;
byte[] readBytes = new byte[file.Length];
// Detect joker file
if (file.Length >= 11000)
{
while (file.Read(readBytes, 0, readBytes.Length) > 0)
{
string asciiString = System.Text.Encoding.ASCII.GetString(readBytes);
foreach (Char chr in asciiString)
{
sumJokerASCIIValue += (ulong)chr;
}
}
}
else
{
while (file.Read(readBytes, 0, readBytes.Length) > 0)
{
string asciiString = System.Text.Encoding.ASCII.GetString(readBytes);
foreach (Char chr in asciiString)
{
sumASCIIValue += (ulong)chr;
}
}
}
}
}
Console.WriteLine("File Read: {0} sumASCIIValue: {1}, sumJokerASCIIValue: {2}", fileName, sumASCIIValue, sumJokerASCIIValue);
}
Console.WriteLine("ASCII value: {0}", sumASCIIValue * sumJokerASCIIValue);
}
}
}
推荐阅读
- python - 使用 Keras 构建了一个模型,该模型报告了良好的准确性,但随后无法进行预测
- oracle - 尝试将 Oracle 复制到 PostgreSQL 时出现 AWS DMS 错误
- sql - 如何计算每个重复值的内连接?
- python - Python:如何仅在命令中获取字符串
- c# - 值不能从角度 8 传递给控制器
- python - Tensorflow MeanSquaredError 不适用于一个数字
- azure - Azure 发布管道,失败阶段后继续
- ios - 是否可以添加条件,其中协议由任一类在 where 子句 Self 中提供多个选项确认
- here-api - 为什么特定路线限制为车高400cm?
- android - 我无法正确使用微调器功能[kotlin]