You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2012 R2下os.walk()找到文件却无法访问的问题

问题:Windows共享文件夹中os.walk()可列出文件,但约0.2%文件访问时提示不存在

现象与背景

在Windows Server 2012 R2的共享文件夹上运行Python代码时,os.walk()能完整获取文件列表,但对其中约0.2%的文件执行os.stat()、open()等操作时,会触发FileNotFoundError。本地Windows 11设备运行相同代码访问本地文件完全正常,该问题仅出现在访问服务器共享文件夹场景,业务需求为自动化迁移该共享文件夹至Google Drive共享驱动器。

已完成排查

  • 排除代码问题:多次简化测试代码(如仅保留os.walk()遍历+os.stat()获取大小的逻辑),问题仍复现;测试代码统计显示193878个文件中有384个无法访问,占比0.198%。
  • 排除长路径限制:已成功访问路径长度超过300字符的文件,问题文件无统一路径长度特征。
  • 无文件类型关联:无法访问的文件涵盖多种类型,并非单一格式。
  • 确认系统侧问题:在PowerShell中可通过目录列表看到目标文件,但单独访问该文件时提示路径不存在,说明问题与Python无关,源于Windows系统或共享机制异常。

可行的排查与解决方向

  1. 核对文件权限(共享+NTFS)

    • 检查无法访问的文件的NTFS权限:右键文件→属性→安全,确认当前访问账号拥有“读取”“读取和执行”权限。注意共享权限与NTFS权限取交集生效,即使共享权限全开,NTFS权限不足也会导致访问失败。
    • 若文件继承权限异常,可尝试重新应用父目录权限,或手动添加账号权限。
  2. 检查文件系统完整性

    • 在服务器上对共享文件夹所在分区执行chkdsk /f命令(需先停止共享或进入安全模式,避免文件占用),修复潜在的文件系统损坏。
    • 使用fsutil file queryallinfo "<文件路径>"命令查看文件元数据,确认系统层面是否能正常识别该文件。
  3. 处理文件名特殊字符

    • 部分文件可能包含远程访问时解析异常的字符(如全角空格、不可见控制字符)。在服务器本地重命名这类文件,再重新测试访问。
    • 用PowerShell的Get-ChildItem -LiteralPath "<目录路径>"命令查看文件原始名称,避免自动转义特殊字符,排查是否存在命名异常。
  4. 调整SMB协议配置

    • 强制使用SMB 3.0协议访问共享:将文件路径改为\\?\UNC\<服务器名>\<共享名>\<文件路径>的长路径格式,同时确保客户端启用SMB 3.0。
    • 重启服务器的Server服务:执行net stop server && net start server,修复SMB服务的临时异常。
  5. 排查文件锁定情况

    • 使用Process Explorer工具查找是否有服务器上的进程锁定了无法访问的文件,释放锁定后重试。
    • 若文件是临时生成的,可能未完全写入磁盘,等待一段时间后再尝试访问。

内容的提问来源于stack exchange,提问作者sanigirl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:53:09