.NET开发Azure File Share清理功能时ShareFileItem属性全为null如何处理
问题原因
你调用ShareDirectoryClient.GetFilesAndDirectories()方法时,默认仅返回文件/目录的名称、是否为目录这两类基础信息,Properties属性默认不会填充,所以你访问的时候全为null。
解决方案
提供两种可行方案,按需选择:
- 方案1:遍历到单个文件时单独拉取属性
不需要修改遍历逻辑,只需要在处理文件的分支中,先获取对应文件的客户端实例,再主动拉取属性即可,修改后的代码片段如下:
else { // 获取当前文件的客户端 ShareFileClient fileClient = dir.GetFileClient(item.Name); // 主动拉取文件属性 ShareFileProperties properties = fileClient.GetProperties(); log.LogInformation($"time: {properties.LastModified.ToString()}"); // 后续的留存时间判断直接使用properties里的属性即可 }
这个方案兼容性好,不需要调整遍历逻辑,适合文件数量不多的场景。
- 方案2:拉取列表时就带上属性参数
如果你用的Azure.Storage.Files.SharesNuget包版本≥12.0.0,可以直接在调用列表方法时指定要拉取所有属性,无需逐个请求,修改遍历的代码行即可:
// 传入traits参数指定返回所有属性 foreach (ShareFileItem item in dir.GetFilesAndDirectories(traits: ShareFileTraits.All))
修改后你原来的item.Properties.LastModified就可以正常取值,不需要额外的请求,适合文件数量较多的场景。
注意事项
- 请确保你使用的连接字符串对应的存储账号身份,有文件属性的读取权限
- 如果采用方案2,请先核对Nuget包版本,低版本SDK不支持
traits参数
内容的提问来源于stack exchange,提问作者mattb
相关产品推荐
相关产品推荐

