📜  Node.js | fs.copyFile()函数

📅  最后修改于: 2022-05-13 01:56:35.007000             🧑  作者: Mango

Node.js | fs.copyFile()函数

fs.copyFile() 方法用于将文件从源路径异步复制到目标路径。默认情况下,如果文件已经存在于给定的目的地,Node.js 将覆盖该文件。可选的 mode 参数可用于修改复制操作的行为。

句法:

fs.copyFile( src, dest, mode, callback )

参数:此方法接受三个参数,如上所述,如下所述:

  • src:它是一个字符串、缓冲区或 URL,表示要复制的源文件名。
  • dest:它是一个字符串、缓冲区或 URL,表示复制操作将创建的目标文件名。
  • mode:它是一个整数,指定复制操作的行为。这些值可以被赋予具有各自行为的预定义常量:
    • fs.constants.COPYFILE_EXCL:此常量指定如果目标文件名已经存在,则复制操作将失败。
    • fs.constants.COPYFILE_FICLONE:此常量指定复制操作将尝试创建写时复制的引用链接。如果平台不支持写时复制,则使用回退机制。
    • fs.constants.COPYFILE_FICLONE_FORCE:此常量指定复制操作将尝试创建写时复制引用链接。如果平台不支持写时复制,则操作将失败,这与前一个不同。

这些常量也可以与按位或组合以创建多个值的掩码。它是一个可选参数。该参数的默认值为 0。

  • 回调:它是一个在方法执行时将被调用的函数。
    • err:如果方法失败会抛出一个错误。

下面的示例说明了 Node.js 中的fs.copyFile() 方法

示例 1:此示例显示了将“example_file.txt”文件复制到“copied_file.txt”文件的操作。

Javascript
// Node.js program to demonstrate the
// fs.copyFile() method
 
// Import the filesystem module
const fs = require('fs');
 
// Get the current filenames
// before the function
getCurrentFilenames();
console.log("\nFile Contents of example_file:",
  fs.readFileSync("example_file.txt", "utf8"));
 
// Copying the file to a the same name
fs.copyFile("example_file.txt", "copied_file.txt", (err) => {
  if (err) {
    console.log("Error Found:", err);
  }
  else {
 
    // Get the current filenames
    // after the function
    getCurrentFilenames();
    console.log("\nFile Contents of copied_file:",
      fs.readFileSync("copied_file.txt", "utf8"));
  }
});
 
// Function to get current filenames
// in directory
function getCurrentFilenames() {
  console.log("\nCurrent filenames:");
  fs.readdirSync(__dirname).forEach(file => {
    console.log(file);
  });
}


Javascript
// Node.js program to demonstrate the
// fs.copyFile() method
 
// Import the filesystem module
const fs = require('fs');
 
// Get the current filenames
// before the function
getCurrentFilenames();
console.log("\nFile Contents of example_file:",
      fs.readFileSync("example_file.txt", "utf8"));
 
// Copying the file to a the same name
fs.copyFile("example_file.txt", "copied_file.txt",
      fs.constants.COPYFILE_EXCL, (err) => {
  if (err) {
    console.log("Error Found:", err);
  }
  else {
 
    // Get the current filenames
    // after the function
    getCurrentFilenames();
    console.log("\nFile Contents of copied_file:",
      fs.readFileSync("copied_file.txt", "utf8"));
  }
});
 
// Function to get current filenames
// in directory
function getCurrentFilenames() {
  console.log("\nCurrent filenames:");
  fs.readdirSync(__dirname).forEach(file => {
    console.log(file);
  });
}


输出:

Current filenames:
example_file.txt
index.js

File Contents of example_file: This is a test file.

Current filenames:
copied_file.txt
example_file.txt
index.js

File Contents of copied_file: This is a test file.

示例 2:此示例显示目标已存在时复制操作失败。

Javascript

// Node.js program to demonstrate the
// fs.copyFile() method
 
// Import the filesystem module
const fs = require('fs');
 
// Get the current filenames
// before the function
getCurrentFilenames();
console.log("\nFile Contents of example_file:",
      fs.readFileSync("example_file.txt", "utf8"));
 
// Copying the file to a the same name
fs.copyFile("example_file.txt", "copied_file.txt",
      fs.constants.COPYFILE_EXCL, (err) => {
  if (err) {
    console.log("Error Found:", err);
  }
  else {
 
    // Get the current filenames
    // after the function
    getCurrentFilenames();
    console.log("\nFile Contents of copied_file:",
      fs.readFileSync("copied_file.txt", "utf8"));
  }
});
 
// Function to get current filenames
// in directory
function getCurrentFilenames() {
  console.log("\nCurrent filenames:");
  fs.readdirSync(__dirname).forEach(file => {
    console.log(file);
  });
}

输出:

Current filenames:
copied_file.txt
example_file.txt
index.js

File Contents of example_file: This is a test file.
Error: [Error: EEXIST: file already exists, copyfile 
  'G:\tutorials\nodejs-fs-copyFile\example_file.txt' -> 
  'G:\tutorials\nodejs-fs-copyFile\copied_file.txt'] {
  errno: -4075,
  code: 'EEXIST',
  syscall: 'copyfile',
  path: 'G:\\tutorials\\nodejs-fs-copyFile\\example_file.txt',
  dest: 'G:\\tutorials\\nodejs-fs-copyFile\\copied_file.txt'
}

参考: https://nodejs.org/api/fs.html#fs_fs_copyfile_src_dest_mode_callback