簡體   English   中英

如何查找文件(blob)是否存在於容器內的文件夾(虛擬目錄)中

[英]How to find if a file (blob) exists in a folder (virtual directory) inside a container

我想查找我的 blob 容器內的虛擬目錄中是否存在任何文件。 里面有可能有數千個文件,所以我想使用優化的方法。 另外,如果文件存在,我想列出這些文件。

我在容器中的目錄結構是 Folder/Subfolder1/file.txt

文件夾/子文件夾2/file.txt

所以這里我想檢測Subfolder1中是否有文件。 由於 azure 存儲具有虛擬目錄結構,如果沒有 blob,子文件夾 1 將不存在。 因此,我想設置條件,以便它查找 Subfolder1 是否存在,如果是,則列出其中的所有文件。

還有什么更好的方法可以從 GetBlobs(prefix: foldername) 方法中獲取有限數量的記錄,比如說我的容器中是否有 500 個文件,而我只想列出 50 個。目前我正在使用 foreach 循環和計數器來列出50 個文件並在計數為 50 時跳出循環

            var inputfiles = ContainerClient.GetBlobsAsync(prefix: inputfolder);
                var count = 0;
                List<string> FilesList = new List<string>();

                await foreach (var blob in inputfiles)
                {
                    count++;
                    if (count == 50)
                        break;
                    FilesList.Add(blob.Name);
                }

我正在使用 Azure SDK v12 和 C# 作為語言

因此,我想設置條件,以便它查找 Subfolder1 是否存在,如果是,則列出其中的所有文件。

正如你的問題和我的評論中提到的,子文件夾並不真正存在,除非其中有一個 blob,因為子文件夾在 Azure Blob 存儲中是虛擬的。

您可以做的只是嘗試通過將子文件夾路徑(在您的情況下為Folder/Subfolder1/ )指定為 blob 前綴來列出子文件夾內的 blob。 如果存在 blob,您將獲得該子文件夾內的 blob 列表。 如果不存在 blob,那么您將得到一個空集合。 您無需先檢查是否存在再列出 blob,因為在這兩種情況下您都必須列出 blob。

以上答案適用於禁用分層命名空間的 Azure 存儲(即非數據湖帳戶)。 對於 Azure Data Lake Gen 2 Storage 帳戶,方法會有所不同,因為那里的文件夾不是虛擬的。

更新

請將您的代碼更改為如下所示:

var blobPages = ContainerClient.GetBlobsAsync(prefix: inputFolder).AsPages(pageSizeHint: 50);
await foreach (var blobPage in blobPages)
{
    foreach (var blob in blobPage.Values)
    {
        FilesList.Add(blob.Name);
    }
}

本質上是為了限制記錄數,您必須添加AsPages(pageSizeHint: 50) ,它將從與前綴匹配的容器中返回最多前 50 個 blob。

更新 2

請嘗試下面的代碼。

var blobPages = ContainerClient.GetBlobsAsync(prefix: inputFolder).AsPages(pageSizeHint: 50).GetAsyncEnumerator();
await blobPages.MoveNextAsync();
var blobPage = blobPages.Current.Values;
foreach (var blob in blobPage)
{
        FilesList.Add(blob.Name);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM