我正在从事的项目(Node.js)意味着对文件系统的大量操作(复制、读取、写入等)。

哪种方法是最快的?


当前回答

相同的机制,但这增加了错误处理:

function copyFile(source, target, cb) {
  var cbCalled = false;

  var rd = fs.createReadStream(source);
  rd.on("error", function(err) {
    done(err);
  });
  var wr = fs.createWriteStream(target);
  wr.on("error", function(err) {
    done(err);
  });
  wr.on("close", function(ex) {
    done();
  });
  rd.pipe(wr);

  function done(err) {
    if (!cbCalled) {
      cb(err);
      cbCalled = true;
    }
  }
}

其他回答

您可能想要使用async/await,因为节点v10.0.0可以使用内置的fs Promises API。

例子:

const fs = require('fs')

const copyFile = async (src, dest) => {
  await fs.promises.copyFile(src, dest)
}

注意:

从节点v11.14.0到v10.17.0, API不再是实验性的。

更多信息:

承诺API

承诺拷贝文件

你可以使用fs-extra模块很容易地做到这一点:

const fse = require('fs-extra');

let srcDir = 'path/to/file';
let destDir = 'pat/to/destination/directory';

fse.moveSync(srcDir, destDir, function (err) {

    // To move a file permanently from a directory
    if (err) {
        console.error(err);
    } else {
        console.log("success!");
    }
});

Or

fse.copySync(srcDir, destDir, function (err) {

     // To copy a file from a directory
     if (err) {
         console.error(err);
     } else {
         console.log("success!");
     }
});

自Node.js 8.5.0以来,我们有了新的fs. js。copyFile和fs。copyFileSync方法。

使用的例子:

var fs = require('fs');

// File "destination.txt" will be created or overwritten by default.
fs.copyFile('source.txt', 'destination.txt', (err) => {
    if (err) 
        throw err;
    console.log('source.txt was copied to destination.txt');
});

通常避免异步文件操作是很好的。以下是一个简短的(即没有错误处理)同步示例:

var fs = require('fs');
fs.writeFileSync(targetFile, fs.readFileSync(sourceFile));

我不能得到creatererestream /createWriteStream方法工作的一些原因,但使用fs-额外的npm模块它马上工作。但我不确定性能上的差异。

保存fs-extra

var fs = require('fs-extra');

fs.copySync(path.resolve(__dirname, './init/xxx.json'), 'xxx.json');