[英]Accessing Blob Name(s) for a Azure Container without Regex
我正在嘗試僅訪問 Azure Blob 的文件名。 例如,如果我當前正在返回字符串privatecontainer/Text-pc.txt
並且我試圖只訪問Text-pc.txt
。 問題在於每個 Azure 容器中都有不同的文件。 我列出了我正在使用的代碼,用於從用戶指定的 Azure 容器生成 Blob 列表。
主運行()
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)
。
您可以使用子字符串,因為我認為假設 blob 名稱中沒有/
字符是安全的。 通過這種方式,您可以在最后一個斜杠之后獲取所有內容的子字符串。 LastIndexOf
非常適合這個。 不過,這與正則表達式方法非常相似。
如果這不起作用,您可以使用 Uri 的Segments
屬性。 最后一個應該是你的文件名
將執行此操作的兩種方法添加到下面的循環中:
foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
{
Console.WriteLine(blobItem.Parent.Uri.MakeRelativeUri(blobItem.Uri));
//Segments Method
Console.WriteLine(blobItem.Uri.Segments.Last());
//Substring Method
string filename = blobItem.AbsolutUri.Substring(det.Filename.LastIndexOf("/") + 1)
Console.WriteLine(fileName);
}
另一種解決方案是將blobItem
為CloudBlob
並使用其Name
屬性。 類似的東西:
foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
{
Console.WriteLine((blobItem as CloudBlob).Name);
}
請注意,對於虛擬文件夾中的 blob,將打印完整路徑 ( virtual-folder-name/file-name
),因為這是 blob 的名稱。 如果您只想要文件名,您可能需要應用 Stephen 提出的解決方案並使用/
分隔符拆分字符串。
添加對 System.Linq 的引用和
var str = "privatecontainer/Text-pc.txt";
var splittedStr = str.Split('/');
var name = splittedStr.Last();
你可能想讓它更健壯一點。
如果您的文件名沒有斜線,因為沒有辦法區分文件夾或文件名,那么您只需查找最后一個斜線並獲取字符串的其余部分:
var cleanFileName = fileName.Substring(fileName.LastIndexOf("/") + 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.