Как скопировать несколько файлов с помощью узла fs.copyFile? - PullRequest
0 голосов
/ 22 февраля 2019

Я использую fs.copyFile для копирования файлов из одного места в другое.Я делаю это дважды , чтобы скопировать два файла.Это избыточно, и я хотел бы улучшить свой код, возможно, скопировав оба файла в место назначения с помощью одного вызова?Как мне этого добиться?

fs.copyFile('src/blah.txt', 'build/blah.txt', (err) => {
        if (err) throw err;
});
fs.copyFile('src/unk.txt', 'build/unk.txt', (err) => {
        if (err) throw err;
});

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете просто создать собственную функцию, которая принимает в качестве аргументов путь src и dest и массив имен файлов:

const util = require('util');
const fs = require('fs');
const path = require('path');
const copyFilePromise = util.promisify(fs.copyFile);

function copyFiles(srcDir, destDir, files) {
    return Promise.all(files.map(f => {
       return copyFilePromise(path.join(srcDir, f), path.join(destDir, f));
    }));
}

// usage
copyFiles('src', 'build', ['unk.txt', 'blah.txt']).then(() => {
   console.log("done");
}).catch(err => {
   console.log(err);
});
0 голосов
/ 22 февраля 2019
   const fs = require('fs');
const path = require('path');
const files = ['/files/a.js', '/files/b.js', '/files/c.txt'];
files.forEach(file => {
  fs.copyFile(path.join(__dirname + file), path.join(__dirname + '/files/backup/' + path.basename(file)), err => {
    if(!err){
    console.log(file + " has been copied!");
  }
  })

});

Используйте следующий код, если принудительная замена нежелательна.

    const fs = require('fs');
        const path = require('path');
        const files = ['/files/a.js','/files/b.js','/files/c.txt'];   
          files.forEach(file => {
    let basename = path.basename(file);
    let oldFile = path.join(__dirname+file);
    let newFile = path.join(__dirname+'/files/backup/'+basename);
    if (!fs.existsSync(newFile)) {
      fs.copyFile(oldFile, newFile, err=>{
        if(!err){
          console.log(basename+" has been copied!");
        }
      });
    }else{
      console.log(basename+" already existed!");
    }
  });
...