11

假設我每天在我的blob存儲中生成一對json文件。我想要做的是獲取我的任何目錄中修改的最新文件。所以我在我的blob中有這樣的東西:獲取從Azure Blob修改的最新文件

2016/01/02/test.json 
2016/01/02/test2.json 
2016/02/03/test.json 

我想要2016/02/03/test.json。因此,一種方法是獲取文件的完整路徑,並執行正則表達式檢查來查找創建的最新目錄,但如果每個目錄中有多個josn文件,則這不起作用。有沒有什麼像File.GetLastWriteTime獲得最新的修改文件? 我使用這些代碼BTW得到所有的文件:

public static CloudBlobContainer GetBlobContainer(string accountName, string accountKey, string containerName) 
{ 
    CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true); 
    // blob client 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    // container 
    CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName); 
    return blobContainer; 
} 

public static IEnumerable<IListBlobItem> GetBlobItems(CloudBlobContainer container) 
{ 
    IEnumerable<IListBlobItem> items = container.ListBlobs(useFlatBlobListing: true); 
    return items; 
} 

public static List<string> GetAllBlobFiles(IEnumerable<IListBlobItem> blobs) 
{ 
    var listOfFileNames = new List<string>(); 

    foreach (var blob in blobs) 
    { 
     var blobFileName = blob.Uri.Segments.Last(); 
     listOfFileNames.Add(blobFileName); 
    } 
    return listOfFileNames; 
} 
+1

終於如何實現這種情況下多個文件夾路徑與最後修改的屬性? – Neo

回答

15

每個IListBlobItem將是一個CloudBlockBlob,一個CloudPageBlob或CloudBlobDirectory。

澆鑄到塊或頁團塊,或相互共有的基類CloudBlob之後(優選地通過使用所述as關鍵字和檢查空),則可以通過blockBlob.Properties.LastModified訪問修改日期。

請注意,您的實現將對容器中的所有Blob執行O(n)掃描,如果有成千上萬個文件,則可能需要一段時間。儘管目前還沒有辦法更有效地查詢blob存儲(除非您濫用文件命名並按照按字母順序排列的較新日期進行編碼)。實際上,如果你需要更好的查詢性能,我建議保留一個數據庫表,方便地將所有文件列表表示爲行,像索引的DateModified列一樣進行搜索,並使用blob路徑列來輕鬆訪問文件。

+0

目錄怎麼樣?如何訪問他們上次修改時間? –

+0

本?你的意思是容器?或者你的意思是blob名稱可以具有的人爲路徑定界符構造? –

+0

後面的一個(blob名稱可以使用的人造路徑定界符構造) –

7

就像Yar說的那樣,你可以使用單個blob對象的LastModified屬性。下面的代碼片段展示瞭如何做到這一點,一旦你有正確的容器的引用:

var latestBlob = container.ListBlobs() 
    .OfType<CloudBlockBlob>() 
    .OrderByDescending(m => m.Properties.LastModified) 
    .ToList() 
    .First(); 

注:BLOB類型可能不<CloudBlockBlob>。如有必要,一定要改變它。

相關問題