ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[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'); } ~~~