如何通过SMB协议读取文件元数据以获取最后修改时间?
如何通过SMB协议读取文件元数据以获取最后修改时间?
嘿,我来帮你搞定这个问题!你遇到的query_information()属性不存在的问题,大概率是因为你用的SMB客户端库版本里,这个方法名已经不适用啦。结合你的环境(RHEL 7.5、Python 2.7.5、SMB 1.5.1),我给你两种可行的解决方案:
方案一:不打开文件直接获取属性(更高效)
如果你只是需要文件的最后修改时间,其实不用打开文件,直接通过已连接的tree对象就能获取:
# 假设你已经完成了SMB连接和tree共享的挂载 file_attrs = tree.getFileAttributes(full_file_path) last_modified_time = file_attrs.last_write_time print("文件最后修改时间:", last_modified_time)
这个方法返回的last_write_time一般是UTC时间,你可以根据自己的需求转换成本地时间。
方案二:打开文件后获取基础信息
如果因为业务逻辑必须打开文件,那可以用get_information()方法替代你原来的query_information(),并且指定要获取的信息类型为FileBasicInformation——这个类包含了文件的创建、访问、修改等基础元数据:
from smb.base import Open, FilePipePrinterAccessMask, CreateDisposition from smb.info import FileBasicInformation current_file_open = Open(tree, full_file_path) current_file_open.create( desired_access=FilePipePrinterAccessMask.GENERIC_READ, file_attributes=0x80, # FILE_ATTRIBUTE_NORMAL share_access=1, create_disposition=CreateDisposition.FILE_OPEN, create_options=0, impersonation_level=2 ) # 获取文件基础信息 file_basic_info = current_file_open.get_information(FileBasicInformation) last_modified_time = file_basic_info.last_write_time print("文件最后修改时间:", last_modified_time)
简单说,你原来用的query_information()不是当前库版本的正确方法,换成get_information()并指定对应信息类就能拿到你要的最后修改时间啦。
备注:内容来源于stack exchange,提问作者Pablo




