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>。如有必要,一定要改变它。

相关问题