我尝试仅访问 Azure Blob 的文件名。例如,如果我当前返回字符串 privatecontainer/Text-pc.txt
我正在尝试访问 Text-pc.txt
。问题是每个 Azure 容器内都有不同的文件。我列出了我正在使用的从用户指定的 Azure 容器生成 Blob 列表的代码。
MainRun()
public static void MainRun()
{
var userInput = GetContainerNameFromUser();
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("STORAGE_CONNECTION_STRING"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(userInput);
foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
{
Console.WriteLine(blobItem.Parent.Uri.MakeRelativeUri(blobItem.Uri));
// The line above for-loop will access all the Blobs within a Container
}
}
有没有办法只访问 Text-pc.txt
无需使用正则表达式?我想远离正则表达式的原因是 for
当存在虚拟文件夹/目录时,上面的循环成功打印出文件名。但是,在具有不带虚拟文件夹/目录的 Blob 的容器上,它将打印 publiccontainer/Text-pc.txt
即(<container_name>/File_name)
.
最佳答案
另一个解决方案可能是将 blobItem
转换为 CloudBlob
并使用其 Name
属性。像这样的东西:
foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
{
Console.WriteLine((blobItem as CloudBlob).Name);
}
请注意,对于虚拟文件夹中的 Blob,将打印完整路径 (虚拟文件夹名称/文件名
),因为这是 Blob 的名称。如果您只需要文件名,您可能需要应用 Stephen 提出的解决方案并使用 /
分隔符分割字符串。
关于c# - 无需正则表达式即可访问 Azure 容器的 Blob 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36754732/