Yar*_*Yar 15 c# azure azure-storage-blobs azure-sdk-.net azure-blob-storage
假设我json每天在blob存储中生成几个文件.我想要做的是在我的任何目录中修改最新的文件.所以我的blob中有这样的东西:
2016/01/02/test.json
2016/01/02/test2.json
2016/02/03/test.json
Run Code Online (Sandbox Code Playgroud)
我想得到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;
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*sdf 24
每个IListBlobItem都将是CloudBlockBlob,CloudPageBlob或CloudBlobDirectory.
在转换为阻止或页面blob或其共享基类CloudBlob (最好使用as关键字并检查为null)之后,您可以通过访问修改日期blockBlob.Properties.LastModified.
请注意,您的实现将对容器中的所有blob执行O(n)扫描,如果有数十万个文件,则可能需要一段时间.目前还没有办法对blob存储进行更有效的查询,(除非你滥用文件命名并对日期进行编码,以便按字母顺序排列新的日期).实际上,如果您需要更好的查询性能,我建议保留一个方便的数据库表,将所有文件列表表示为行,其中包括要搜索的索引DateModified列和带有blob路径的列,以便于访问该文件.
像Yar所说,你可以使用LastModified单个blob对象的属性.这是一个代码片段,一旦您引用了正确的容器,就会显示如何执行此操作:
var latestBlob = container.ListBlobs()
.OfType<CloudBlockBlob>()
.OrderByDescending(m => m.Properties.LastModified)
.ToList()
.First();
Run Code Online (Sandbox Code Playgroud)
注意:blob类型可能不是<CloudBlockBlob>.如有必要,请务必更改.
| 归档时间: |
|
| 查看次数: |
14917 次 |
| 最近记录: |