首页 > 解决方案 > GetFileAttributesExA 能否返回 SMB3 挂载的陈旧信息?

问题描述

我试图找出一个单线程 Python 程序中问题的根本原因,该程序基本上是这样的(高度简化):

# Before running
os.remove(path)

# While running
if os.path.isfile(path):
    with open(path) as fd:
        ...

我基本上看到了不稳定的行为,当文件不存在时isfile(它使用stat,它本身GetFileAttributesExA在 Python 2.7 的引擎盖下使用,请参见此处)可以返回,下一次调用失败。Trueopen

path在 SMB3 网络共享上,我怀疑某种缓存行为。是否有可能GetFileAttributesExA返回过时的信息?

将 SMB 客户端缓存从默认(10s)减少到 0s 似乎使问题消失了:

Set-SmbClientConfiguration -DirectoryCacheLifetime 0 -FileInfoCacheLifetime 0

(注意:这里的正确解决方法是try打开文件并捕获异常,当然,但我对这个问题感到困惑,想了解根本原因。)

标签: pythonwindowswinapifilesystemssmb

解决方案


推荐阅读