bon*_*nez 446 javascript node.js
我正在工作的项目(node.js)意味着文件系统(复制/读/写等)的许多操作.我想知道,哪种方法最快,我很乐意提供一些建议.
小智 658
这是使用流在一行代码中复制文件的好方法:
var fs = require('fs');
fs.createReadStream('test.log').pipe(fs.createWriteStream('newLog.log'));
Run Code Online (Sandbox Code Playgroud)
const fs = require('fs');
// 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');
});
Run Code Online (Sandbox Code Playgroud)
Mik*_*ing 289
相同的机制,但这增加了错误处理:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*erz 136
createReadStream/createWriteStream
由于某些原因,我无法使该方法正常工作,但使用fs-extra
npm模块它可以立即工作.我不确定性能差异.
npm install --save fs-extra
var fs = require('fs-extra');
fs.copySync(path.resolve(__dirname,'./init/xxx.json'), 'xxx.json');
Run Code Online (Sandbox Code Playgroud)
Mik*_*ail 122
从Node.js 8.5.0开始,我们有了新的fs.copyFile和fs.copyFileSync方法.
用法示例:
var fs = require('fs');
// 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');
});
Run Code Online (Sandbox Code Playgroud)
ben*_*eet 73
编写速度快,使用方便,具有承诺和错误管理功能.
function copyFile(source, target) {
var rd = fs.createReadStream(source);
var wr = fs.createWriteStream(target);
return new Promise(function(resolve, reject) {
rd.on('error', reject);
wr.on('error', reject);
wr.on('finish', resolve);
rd.pipe(wr);
}).catch(function(error) {
rd.destroy();
wr.end();
throw error;
});
}
Run Code Online (Sandbox Code Playgroud)
与async/await语法相同:
async function copyFile(source, target) {
var rd = fs.createReadStream(source);
var wr = fs.createWriteStream(target);
try {
return await new Promise(function(resolve, reject) {
rd.on('error', reject);
wr.on('error', reject);
wr.on('finish', resolve);
rd.pipe(wr);
});
} catch (error) {
rd.destroy();
wr.end();
throw error;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 41
嗯,通常最好避免异步文件操作.这是短的(即没有错误处理)同步示例:
var fs = require('fs');
fs.writeFileSync(targetFile, fs.readFileSync(sourceFile));
Run Code Online (Sandbox Code Playgroud)
小智 17
Mike Schilling的错误处理解决方案,错误事件处理程序的快捷方式.
function copyFile(source, target, cb) {
var cbCalled = false;
var rd = fs.createReadStream(source);
rd.on("error", done);
var wr = fs.createWriteStream(target);
wr.on("error", done);
wr.on("close", function(ex) {
done();
});
rd.pipe(wr);
function done(err) {
if (!cbCalled) {
cb(err);
cbCalled = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*lds 17
如果您不关心它是异步的,并且不是在复制千兆字节大小的文件,而是宁愿不为单个函数添加另一个依赖项:
function copySync(src, dest) {
if (!fs.existsSync(src)) {
return false;
}
var data = fs.readFileSync(src, 'utf-8');
fs.writeFileSync(dest, data);
}
Run Code Online (Sandbox Code Playgroud)
Tam*_*oke 13
您可能想要使用 async/await,因为node v10.0.0
内置的fs Promises API
.
例子:
const fs = require('fs')
const copyFile = async (src, dest) => {
await fs.promises.copyFile(src, dest)
}
Run Code Online (Sandbox Code Playgroud)
笔记:
该
node v11.14.0, v10.17.0
API 不再是实验性的。
更多信息:
小智 5
const fs = require("fs");
fs.copyFileSync("filepath1", "filepath2"); //fs.copyFileSync("file1.txt", "file2.txt");
Run Code Online (Sandbox Code Playgroud)
这是我个人用来复制文件并使用 Node.js 替换另一个文件的方法:)
归档时间: |
|
查看次数: |
303510 次 |
最近记录: |