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

调用fs::last_write_time读取时触发文件已存在创建错误排查

问题原因分析:std::filesystem::last_write_time读取时触发「文件已存在无法创建」异常
  • Windows平台API版本与实现差异
    C++标准库的std::filesystem::last_write_time读取操作在Windows底层依赖Win32 API。Windows Server 2019的底层API存在兼容性问题:即便只是读取文件时间,当文件被独占锁定时,底层逻辑仍可能触发需要写入权限的操作(比如临时元数据写入尝试);而Win11的API已优化该场景,只读操作仅请求必要的读取权限,不会触发此类异常。

  • 文件独占写入的锁冲突
    当目标文件被其他程序以独占写入模式循环打开时,Server 2019上的底层API无法获取足够的文件访问权限,标准库将底层的权限错误错误映射为「Cannot create a file when that file already exists」异常——这是错误码映射不精准导致的误导性提示,本质是文件访问权限不足,而非真的要创建已存在的文件。

  • 验证与解决方向

    • 先测试Server 2019环境下,文件未被其他程序写入时调用last_write_time是否正常,确认问题仅出现在文件被独占写入的场景。
    • 检查写入文件的程序,确认其打开文件时是否设置了FILE_SHARE_READ标志(允许其他进程读取文件元数据),若未设置则修改写入程序的文件打开参数。
    • 绕过C++标准库封装,直接调用Win32 APIGetFileTime获取文件修改时间,避免标准库的错误码映射和不必要的内部操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:10:28