[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
- 網絡開發