gpt4 book ai didi

c# - 以编程方式在容器 Azure C 中创建子文件夹

转载 作者:行者123 更新时间:2023-11-30 14:47:19 25 4
gpt4 key购买 nike

目前我有很多容器。对于每个容器,我想从另一个存储帐户添加一个仅包含文件夹名称的空文件夹。然后我想用必要的数据填充它。

我不确定是否有一个属性可以在容器内创建文件夹。

这里我有两个容器,一个来 self 的 sourceAccount,另一个来 self 的 targetAccount。我正在将数据从 sourceAccout 发送到我的 tagetAccount。在我的容器 dayBlob 内的目标帐户中,我想创建子文件夹。

在这部分代码中,我获取了所有容器。当我拿到这些容器时,我得到了每个容器的名称。我想在目标容器中使用我在 foreach

中获得的名称添加子文件夹
        foreach (var items in containers)
{
var containerName = items.Name;

}

我的代码如下

static CloudStorageAccount sourceAccount = new CloudStorageAccount(new StorageCredentials("name", "key"), true);
static CloudStorageAccount targertAccount = new CloudStorageAccount(new StorageCredentials("name", "key"), true);

static void Main(string[] args)
{
DateTime dateToday = DateTime.Today;

DateTime date = new DateTime();
DateTime dateutc = TimeZoneInfo.ConvertTimeToUtc(date);
TimeSpan startDay = new TimeSpan(00, 00, 00);
TimeSpan endDay = new TimeSpan(23, 59, 59);
var sourceClient = sourceAccount.CreateCloudBlobClient();
var targetClient = targetAccount.CreateCloudBlobClient();
var testContainer = sourceClient.GetContainerReference("test");
var sourceContainer = sourceClient.GetContainerReference("downloads");
var itDropBoxContainer = sourceClient.GetContainerReference("it-dropbox");
var dayBlob = targetClient.GetContainerReference($"day{dateToday.Day}");

date = DateTime.Parse($"{dateToday.Day}/{dateToday.Month}/{dateToday.Year}");
var start = date + startDay;
var end = date + endDay;
IEnumerable<CloudBlobContainer> containers = sourceClient.ListContainers();

foreach (var items in containers)
{
var containerName = items.Name;

}

foreach (IListBlobItem item in testContainer.ListBlobs(useFlatBlobListing: true))
{

var blob = item as CloudBlockBlob;
var modificationDate = blob.Properties.LastModified;
// to set the modfication date as local time
var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
var lastModified = TimeZoneInfo.ConvertTime((DateTimeOffset)modificationDate, britishZone);
if (lastModified > start && lastModified < end)
{
try
{

if (blob != null)
{
CloudBlockBlob sourceBlob = testContainer.GetBlockBlobReference(blob.Name);
CloudBlockBlob targetBlob = dayBlob.GetBlockBlobReference(blob.Name);

Console.WriteLine($"Successfully created a snapshot of blob {blob.Name}");
}
}
catch (Exception ex)
{

ExceptionHandler.LogError(ex, "Failed to copy to the target folder");
}
}

else
{
Console.WriteLine($"Failed to create a snapshot of blob {blob.Name}");

}

}
}

最佳答案

正如 @GauravMantri 提到的,我们无法在没有独立的情况下创建文件夹,因为文件夹是 Blob 存储中的虚拟实体。使用前不需要创建文件夹。例如,即使容器中不存在folder1,我们也可以获取folder1的引用。

var directory = container.GetDirectoryReference("folder1");
// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = directory.GetBlockBlobReference("myblob");

如果您确实想创建一个文件夹,则需要在其中创建一个 blob。

var directory = container.GetDirectoryReference("folder1");
CloudBlockBlob blockBlob = directory.GetBlockBlobReference("dummy.txt");
blockBlob.UploadFromByteArray(new byte[0], 0, 0);

要列出容器中的所有文件夹,您可以使用以下代码。

var folders = container.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
foreach (var folder in folders)
{
Console.WriteLine(folder.Uri);
}

关于c# - 以编程方式在容器 Azure C 中创建子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com