>[success] # 復制文件
1. 要注意的是**只能復制文件不能復制文件夾**
2. **要被復制的文件目錄中的文件夾要是已存在的狀態**,否則您在復制文件之前沒有手動創建目標文件夾,那么 Node.js 會嘗試將它視為文件名,并報錯`ENOENT: no such file or directory`。
| API | 描述 |
| --- | --- |
| `fs.copyFile(src, dest[, flags], callback)` | 異步復制文件 |
| `fs.copyFileSync(src, dest[, flags])` | 同步復制文件 |
| `fsPromises.copyFile(src, dest[, mode])` | 異步復制文件 (Promise-based) |
>[danger] ### fs.copyFile(src, dest\[, flags\], callback)
1. `fs.copyFile(src, dest[, flags], callback)`是 Node.js 中用于異步復制文件的 API,它可以將源文件復制到目標文件中。
>[danger] ##### api
| 參數 | 類型 | 描述 |
| --- | --- | --- |
| src | string|Buffer|URL | 要復制的源文件名 |
| dest | string|Buffer|URL | 復制操作的目標文件名 |
| flags | integer | 可選參數,用于指定復制操作的行為。默認值為 0。可以使用掩碼組合以下標志:fs.constants.COPYFILE\_EXCL、fs.constants.COPYFILE\_FICLONE 或 fs.constants.COPYFILE\_FICLONE\_FORCE。 |
| callback | Function | 異步操作完成后的回調函數。如果出錯,將返回錯誤;否則返回 undefined。 |
下面是 flags 參數的可選值:
| 值 | 描述 |
| --- | --- |
| fs.constants.COPYFILE\_EXCL | 如果 dest 已經存在,則復制操作將失敗。 |
| fs.constants.COPYFILE\_FICLONE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則使用后備復制機制。 |
| fs.constants.COPYFILE\_FICLONE\_FORCE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則該操作將失敗。 |
>[danger] ##### 案例
~~~
const fs = require('fs')
fs.copyFile('b/z.txt', 'a/zz.txt', (err) => {
if (err) throw err
console.log('copy done')
})
~~~
~~~
import { copyFileSync, constants } from 'fs';
// 默認情況下將創建或覆蓋 destination.txt。
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
// 通過使用 COPYFILE_EXCL,如果 destination.txt 存在,則該操作將失敗。
copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
~~~
>[danger] ### fs.copyFileSync(src, dest[, mode])
1. `fs.copyFileSync(src, dest[, mode])`是Node.js中fs模塊的一個同步方法,用于將源文件(src)復制到目標文件(dest)。如果目標文件已經存在,則會被覆蓋
2. 使用該方法時,如果源文件不存在或不可讀,或目標文件的目錄不存在或不可寫,都會拋出異常。因此,在使用該方法之前,需要確保源文件和目標文件的路徑都是正確的,并且具有相應的文件權限
>[danger] ##### api
| 參數 | 類型 | 描述 |
| --- | --- | --- |
| src | string|Buffer|URL | 要復制的源文件名 |
| dest | string|Buffer|URL | 復制操作的目標文件名 |
| mode | integer | 可選,復制操作的修飾符,默認為0 |
| 返回值 | undefined | 同步地復制 src 到 dest,如果 dest 已經存在,則會被覆蓋,Node.js 不保證復制操作的原子性。如果在打開目標文件進行寫入后發生錯誤,Node.js 將嘗試刪除目標文件。 |
| mode選項 | 行為 |
| --- | --- |
| fs.constants.COPYFILE\_EXCL | 如果 dest 已經存在,則復制操作將失敗 |
| fs.constants.COPYFILE\_FICLONE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則使用后備復制機制 |
| fs.constants.COPYFILE\_FICLONE\_FORCE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則該操作將失敗 |
>[danger] ##### 案例
~~~
const fs = require('fs')
try {
fs.copyFileSync('b/z.txt', 'zz.txt')
} catch (e) {
console.log(e)
}
~~~
~~~
import { copyFileSync, constants } from 'fs';
// 默認情況下將創建或覆蓋 destination.txt。
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
// 通過使用 COPYFILE_EXCL,如果 destination.txt 存在,則該操作將失敗。
copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
~~~
>[danger] ### fsPromises.copyFile(src, dest[, mode])
1. 異步地將`src`復制到`dest`。 默認情況下,如果`dest`已經存在,則會被覆蓋。
>[danger] ##### api
| 參數 | 類型 | 描述 |
| --- | --- | --- |
| src | string | Buffer |
| dest | string | Buffer |
| flags | integer | 可選參數,用于指定復制操作的行為。默認值為 0。可以使用掩碼組合以下標志:fs.constants.COPYFILE\_EXCL、fs.constants.COPYFILE\_FICLONE 或 fs.constants.COPYFILE\_FICLONE\_FORCE。 |
下面是 flags 參數的可選值:
| 值 | 描述 |
| --- | --- |
| fs.constants.COPYFILE\_EXCL | 如果 dest 已經存在,則復制操作將失敗。 |
| fs.constants.COPYFILE\_FICLONE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則使用后備復制機制。 |
| fs.constants.COPYFILE\_FICLONE\_FORCE | 復制操作將嘗試創建寫時復制引用鏈接。如果平臺不支持寫時復制,則該操作將失敗。 |
>[danger] ##### 案例
~~~js
import { constants } from 'fs';
import { copyFile } from 'fs/promises';
try {
await copyFile('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
} catch {
console.log('The file could not be copied');
}
// 通過使用 COPYFILE_EXCL,如果 destination.txt 存在,則該操作將失敗。
try {
await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
console.log('source.txt was copied to destination.txt');
} catch {
console.log('The file could not be copied');
}
~~~
- 基礎
- 什么是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
- 網絡開發