[TOC]
>[success] # 删除文件或目录的api
| 操作 | 方法 | 异步/同步 |
| --- | --- | --- |
| 删除文件 | `fs.unlink()` | 异步 |
| 删除文件 | `fs.unlinkSync()` | 同步 |
| 删除空目录 | `fs.rmdir()` | 异步 |
| 删除空目录 | `fs.rmdirSync()` | 同步 |
| 删除文件或目录 | `fs.rm()` | 异步 |
| 删除文件或目录 | `fs.rmSync()` | 同步 |
>[danger] ### node fs.unlink(path, callback)删除文件
`fs.unlink(path, callback)`是 Node.js 中用于删除文件的方法。它是一个异步方法,接受一个文件路径作为参数,用于删除该路径所表示的文件。
参数说明:
* `path`:一个字符串或`Buffer`对象,表示要删除的文件的路径。也可以使用`URL`对象。
* `callback`:一个回调函数,用于处理删除文件的结果。回调函数接受一个可能发生的错误对象作为参数。如果删除成功,该参数将为`null`。
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string \| Buffer \| URL | 要删除的文件路径 |
| callback | function | 删除操作完成后的回调函数,接受一个错误对象作为参数。如果删除成功,该参数将为`null`。 |
>[danger] ##### 案例
~~~
const fs = require('fs')
fs.unlink('test.txt', (err) => {
if (err) throw err // 不存在的文件会报错
console.log('successfully deleted test.txt')
})
~~~
* 批量删除多个文件
~~~
const fs = require('fs');
const files = ['/path/to/file1.txt', '/path/to/file2.txt', '/path/to/file3.txt'];
for (const file of files) {
fs.unlink(file, (err) => {
if (err) throw err;
console.log(`${file} 已删除`);
});
}
~~~
>[danger] ### fsPromises.unlink(path)
1. `fsPromises.unlink(path)`是 Node.js 中用于删除文件的 API 之一,它是`fs`模块的 Promise 版本,用于删除指定路径的文件。该方法返回一个 Promise 对象,因此可以使用`async/await`或 Promise 的链式调用来处理删除文件的结果
>[danger] ##### api
参数说明:
* `path`:一个字符串或`Buffer`对象,表示要删除的文件的路径。也可以使用`URL`对象。
>[danger] ##### 案例
~~~javascript
const fsPromises = require('fs').promises;
// 删除文件
fsPromises.unlink('/path/to/file.txt')
.then(() => {
console.log('文件已删除');
})
.catch((err) => {
console.error(`删除文件失败:${err}`);
});
~~~
* 批量删除
~~~
const fs = require('fs').promises;
async function deleteFiles() {
const files = ['/path/to/file1.txt', '/path/to/file2.txt', '/path/to/file3.txt'];
for (const file of files) {
try {
await fs.unlink(file);
console.log(`${file} 已删除`);
} catch (err) {
console.error(`删除 ${file} 失败:${err}`);
}
}
}
deleteFiles();
~~~
>[danger] ### fs.unlinkSync(path)
1. `fs.unlinkSync(path)`是 Node.js 中用于同步删除文件的方法
>[danger] ##### api
参数说明:
* `path`:一个字符串或`Buffer`对象,表示要删除的文件的路径。也可以使用`URL`对象。
>[danger] ##### 案例
~~~
const fs = require('fs')
try {
// 删除文件
fs.unlinkSync('test212.txt')
console.log('文件已删除')
} catch (err) {}
~~~
>[danger] ### fs.rmdir(path[, options], callback)
1. `fs.rmdir()`是 Node.js 中用于删除目录的方法之一,它用于删除指定路径的目录。该方法是一个异步方法,需要使用回调函数来处理删除目录的结果。
2. **只能删除空文件夹**
>[danger] ##### api
1. `maxRetries`和`retryDelay`选项只有在`recursive`选项为`true`时才会生效。另外,建议在使用`fs.rmdir()`方法时,尽量使用 Promise 或 async/await 的方式处理结果,而不是回调函数。
| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| `path` | `string`或`Buffer`或`URL` | 要删除的目录的路径。 |
| `options` | `Object` | 可选的选项参数对象。包括以下属性: |
| `options.maxRetries` | `integer` | 如果遇到`EBUSY`、`EMFILE`、`ENFILE`、`ENOTEMPTY`或`EPERM`错误,Node.js 将在每次尝试时以`retryDelay`毫秒的线性退避等待时间重试该操作。此选项表示重试次数。如果`recursive`选项不为`true`,则忽略此选项。默认为`0`。 |
| `options.recursive` | `boolean` | 如果为`true`,则执行递归目录删除。在递归模式下,操作将在失败时重试。该选项在 Node.js 15.0.0 版本中已经弃用。默认为`false`。 |
| `options.retryDelay` | `integer` | 重试之间等待的时间(以毫秒为单位)。如果`recursive`选项不为`true`,则忽略此选项。默认为`100`。 |
| `callback` | `Function` | 回调函数,用于处理删除操作的结果。回调函数有一个参数`err`,表示删除操作的错误信息。如果删除成功,则`err`为`null`。 |
>[danger] ##### 使用
~~~
const fs = require('fs')
fs.rmdir('a', (err) => {
if (err) throw err
})
~~~
~~~
const fs = require('fs')
// 递归删除被弃用了 需要使用fs.rm
fs.rmdir('a', { recursive: true }, (err) => {
if (err) throw err
})
~~~
>[danger] ### fsPromises.rmdir(path[, options])
1. `fsPromises.rmdir(path[, options])`是 Node.js 的文件系统模块(`fs`)中的一个异步函数,用于删除指定路径下的目录。
2. 该函数返回一个 Promise,当删除操作完成时,该 Promise 将被解析为`undefined`。如果删除操作失败,则 Promise 将被拒绝,并传递一个错误对象作为拒绝原因。
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string / Buffer / URL | 要删除的目录的路径。 |
| options | object | 可选的选项对象,可以包含以下属性: |
| options.maxRetries | integer | 如果遇到 EBUSY、EMFILE、ENFILE、ENOTEMPTY 或 EPERM 错误,Node.js 将在每次尝试时以 retryDelay 毫秒的线性退避等待时间重试该操作。 此选项表示重试次数。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 0。 |
| options.recursive | boolean | 如果为 true,则执行递归目录删除。 在递归模式下,操作将在失败时重试。 默认值: false。已弃用。 |
| options.retryDelay | integer | 重试之间等待的时间(以毫秒为单位)。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 100。 |
>[danger] ##### 案例
~~~
const fsPromises = require('fs/promises');
// 删除目录 { recursive: true } 弃用
fsPromises.rmdir('/path/to/directory')
.then(() => {
console.log('目录删除成功!');
})
.catch((err) => {
console.error('目录删除失败:', err);
});
~~~
>[danger] ### fs.rmdirSync(path[, options])
1. `fs.rmdirSync()`是 Node.js 中的一个同步方法,用于删除指定路径的空目录。
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string \| Buffer \| URL | 要删除的目录的路径 |
| options | Object | 可选的选项对象 |
| maxRetries | integer | 如果遇到 EBUSY、EMFILE、ENFILE、ENOTEMPTY 或 EPERM 错误,Node.js 将在每次尝试时以 retryDelay 毫秒的线性退避等待时间重试该操作。此选项表示重试次数。如果 recursive 选项不为 true,则忽略此选项。默认值: 0。 |
| recursive | boolean | 如果为 true,则执行递归目录删除。在递归模式下,操作将在失败时重试。默认值: false。已弃用。 |
| retryDelay | integer | 重试之间等待的时间(以毫秒为单位)。如果 recursive 选项不为 true,则忽略此选项。默认值: 100。 |
| 返回值 | undefined | 同步删除操作的返回值。 |
>[danger] ##### 案例
~~~
const fs = require('fs');
try {
// 同步删除目录
fs.rmdirSync('a');
console.log(`目录 ${dirPath} 删除成功!`);
} catch (err) {
console.error(`目录 ${dirPath} 删除失败:`, err);
}
~~~
>[danger] ### fs.rm(path[, options], callback) -- 文件目录都能删除
1. `fs.rm()`是 Node.js v14 引入的一个异步方法,用于删除文件或目录。**它可以删除指定路径的文件或空目录,也可以递归删除目录及其子目录中的所有文件和目录**。
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string | Buffer | URL | 要删除的文件或目录的路径 |
| options | Object | 可选的选项对象 |
| force | boolean | 当为`true`时,如果`path`不存在,则异常将被忽略。默认值为`false`。 |
| maxRetries | integer | 如果遇到 EBUSY、EMFILE、ENFILE、ENOTEMPTY 或 EPERM 错误,Node.js 将在每次尝试时以`retryDelay`毫秒的线性退避等待时间重试该操作。此选项表示重试次数。如果`recursive`选项不为`true`,则忽略此选项。默认值为`0`。 |
| recursive | boolean | 如果为`true`,则执行递归删除。在递归模式下,操作将在失败时重试。默认值为`false`。 |
| retryDelay | integer | 重试之间等待的时间(以毫秒为单位)。如果`recursive`选项不为`true`,则忽略此选项。默认值为`100`。 |
| callback | Function | 在删除操作完成后被调用的回调函数,接受一个错误对象作为其第一个参数。 |
| callback err | Error | 如果删除操作成功,则该参数为`null`,否则为一个包含错误信息的`Error`对象。 |
>[danger] ##### 案例
~~~
const fs = require('fs')
// 可以删除有内容的文件夹 并且可以递归删除 下面例子会删除 a 文件夹下的所有文件
fs.rm('a', { recursive: true }, (err) => {
if (err) throw err
})
~~~
>[danger] ### fsPromises.rm(path[, options])
1. `fsPromises.rm()`是Node.js中的一个异步方法,用于删除指定路径的文件或文件夹。
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string / Buffer / URL | 要删除的文件或文件夹的路径,可以是相对路径或绝对路径。 |
| options | Object | 可选的对象,用于指定删除操作的选项。 |
| options.force | boolean | 当为 true 时,如果 path 不存在,则异常将被忽略。 默认值: false。 |
| options.maxRetries | integer | 如果遇到 EBUSY、EMFILE、ENFILE、ENOTEMPTY 或 EPERM 错误,Node.js 将在每次尝试时以 retryDelay 毫秒的线性退避等待时间重试该操作。 此选项表示重试次数。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 0。 |
| options.recursive | boolean | 如果为 true,则执行递归目录删除。 在递归模式下,操作将在失败时重试。 默认值: false。 |
| options.retryDelay | integer | 重试之间等待的时间(以毫秒为单位)。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 100。 |
| 返回值 | Promise | Promise对象,成功时将使用`undefined`履行,失败时将使用一个`Error`对象拒绝。 |
>[danger] ##### 案例
~~~
const fsPromises = require('fs/promises');
// 删除 example 目录及其子目录和文件
fsPromises.rm('example', { recursive: true })
.then(() => {
console.log('example目录删除成功');
})
.catch((err) => {
console.error('example目录删除失败', err);
});
~~~
>[danger] ### fs.rmSync(path[, options])
1. `fs.rmSync()`是Node.js中的一个同步方法,用于删除指定路径的文件或文件夹
>[danger] ##### api
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| path | string / Buffer / URL | 要删除的文件或文件夹的路径,可以是相对路径或绝对路径。 |
| options | Object | 可选的对象,用于指定删除操作的选项。 |
| options.force | boolean | 当为 true 时,如果 path 不存在,则异常将被忽略。 默认值: false。 |
| options.maxRetries | integer | 如果遇到 EBUSY、EMFILE、ENFILE、ENOTEMPTY 或 EPERM 错误,Node.js 将在每次尝试时以 retryDelay 毫秒的线性退避等待时间重试该操作。 此选项表示重试次数。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 0。 |
| options.recursive | boolean | 如果为 true,则执行递归目录删除。 在递归模式下,操作将在失败时重试。 默认值: false。 |
| options.retryDelay | integer | 重试之间等待的时间(以毫秒为单位)。 如果 recursive 选项不为 |
>[danger] ##### 案例
~~~
const fs = require('fs')
// 可以删除有内容的文件夹 并且可以递归删除 下面例子
try {
fs.rmSync('a', { recursive: true })
} catch (e) {
console.log(e)
}
~~~
- 基础
- 什么是Node.js
- 理解 I/O 模型
- 理解node 中 I/O
- 对比node 和java 使用场景
- node 模块管理
- 内置模块 -- buffer
- 内置模块 -- fs
- fs -- 文件描述符
- fs -- 打开文件 api
- fs -- 文件读取 api
- fs -- 文件写入 api
- fs -- 创建目录 api
- fs -- 读取文件目录结构 api
- fs -- 文件状态(信息) api
- fs -- 删除文件/目录 api
- fs -- 重命名 api
- fs -- 复制文件 api
- 内置模块 -- events
- 内置模块 -- stream
- 可读流 -- Readable
- 可写流 -- Writable
- Duplex
- Transform
- 内置模块 -- http
- http -- 从客户端发起
- http -- 从服务端发起
- 内置模块 -- url
- 网络开发