这里是在C#中下载和读取Azure Blobs容器文件的示例。您将需要使函数async-await
连接Azure Blobs容器并在本地下载blob文件,以读取这些文件并对其进行“处理”。在该示例中,我们找到大小恰好为11K bytes
的小丑文件,并将小丑文件和其他文件中每个字符的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);
}
}
}