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

Linux下std::ofstream打开成功但write报“No such file or directory”原因排查

导致fs.write()报"No such file or directory"的其他原因

结合你的C++代码和Linux系统特性,除了文件被删除的情况,还有以下几种常见触发该错误的原因:

  • 文件所在文件系统被卸载:如果文件所在的磁盘分区(包括外部挂载的U盘、网络共享存储等)被卸载(正常或强制卸载),进程持有的文件描述符会失效,此时写入操作会触发该错误。即便文件在卸载前已打开,卸载后底层存储不可用,写入无法完成。

  • 文件描述符被意外关闭:若其他线程、信号处理函数或外部操作误关闭了fs对应的文件描述符,后续调用write时,文件描述符已不指向有效文件对象,就会出现该错误。多线程环境下未做好文件对象的同步保护时,这类问题更容易发生。

  • 目录被删除且文件需扩展写入:已打开的文件在目录被删除后通常仍可写入,但如果文件当前存储空间耗尽,需要向磁盘申请新存储块时,部分文件系统可能因目录节点已不存在而拒绝扩展,进而触发该错误。

  • 文件名递增逻辑错误:你的代码中file_name += 1;存在问题——std::string的+=传入int类型的1,会将其转为ASCII值为1的不可见字符,而非数字递增。后续打开的文件名包含非法字符,即便open未直接报错,后续write也会因无法定位有效文件而触发错误。正确的文件名递增方式应为:

    int num = std::stoi(file_name);
    file_name = std::to_string(num + 1);
    
  • 存储设备硬件故障:如果文件所在存储设备出现硬件故障(如磁盘坏道、控制器故障),内核无法找到对应的文件存储节点,写入时也会返回该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:42:39