Node.js 如何删除文件?

Node.js 删文件用 fs.unlink(回调)、fs.promises.unlink(Promise)、fs.unlinkSync(同步);删目录用 fs.rm 加 recursive。文件不存在会抛 ENOENT,本文给出各写法与错误处理。

最佳实践
文件、模块与依赖组织示意

删文件用 fs.unlink 系列;删目录用 fs.rm 加 { recursive: true }。

三种删文件写法

Promise 版(推荐):

const fs = require('fs').promises;

try {
  await fs.unlink('/path/to/file.txt');
  console.log('删除成功');
} catch (err) {
  if (err.code === 'ENOENT') console.log('文件本来就不存在');
  else throw err;
}

回调版:

const fs = require('fs');

fs.unlink('/path/to/file.txt', (err) => {
  if (err) {
    console.error('删除失败:', err);
    return;
  }
  console.log('删除成功');
});

同步版(脚本场景):

fs.unlinkSync('/path/to/file.txt');

删除目录

// 空目录
await fs.rmdir('/path/to/emptydir');

// 非空目录(Node 14.14+)
await fs.rm('/path/to/dir', { recursive: true, force: true });
// recursive: 连内容一起删;force: 不存在也不报错

错误处理要点

  • ENOENT(文件不存在):最常见的错误,多数场景下应该静默忽略而不是让程序崩——用 try/catch 或 fs.rm(p, {force:true});
  • EACCES/EPERM:权限不足,或试图用 unlink 删目录;
  • 文件被占用(Windows 上常见):确保没有句柄还开着它。

常见问题(FAQ)

Q:删除能撤销吗?
不能。unlink 是系统级删除,不进回收站。需要可恢复就自己实现"移到 .trash 目录"的软删除,或用 trash 包。

Q:unlink 和 rm 有什么区别?
对文件两者等价(rm 是后加的通用接口);对目录只有 rm 支持递归。新代码统一用 fs.rm 也行。

Q:删大文件会阻塞吗?
unlink 只是摘掉目录项,速度极快,与文件大小无关。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台