You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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

火山引擎 最新活动