如何在node.js上移动文件(如mv命令外壳)?有什么方法可以使用,还是应该读取文件,写入新文件并删除旧文件?
如何在node.js中移动文件?
我将所有涉及的功能(即rename
,)彼此分开copy
,unlink
以获取灵活性并实现所有功能,当然:
const renameFile = (path, newPath) =>
new Promise((res, rej) => {
fs.rename(path, newPath, (err, data) =>
err
? rej(err)
: res(data));
});
const copyFile = (path, newPath, flags) =>
new Promise((res, rej) => {
const readStream = fs.createReadStream(path),
writeStream = fs.createWriteStream(newPath, {flags});
readStream.on("error", rej);
writeStream.on("error", rej);
writeStream.on("finish", res);
readStream.pipe(writeStream);
});
const unlinkFile = path =>
new Promise((res, rej) => {
fs.unlink(path, (err, data) =>
err
? rej(err)
: res(data));
});
const moveFile = (path, newPath, flags) =>
renameFile(path, newPath)
.catch(e => {
if (e.code !== "EXDEV")
throw new e;
else
return copyFile(path, newPath, flags)
.then(() => unlinkFile(path));
});
moveFile
只是一个便利函数,例如,当我们需要更细粒度的异常处理时,我们可以单独应用这些函数。
根据seppo0010的评论,我使用了重命名功能。
http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback
fs.rename(oldPath,newPath,回调)
在v0.0.2中添加
oldPath <String> | <Buffer> newPath <String> | <Buffer> callback <Function>
异步重命名(2)。除了可能的异常外,没有其他参数被提供给完成回调。
使用mv节点模块,该模块将首先尝试执行an fs.rename
,然后回退到复制然后取消链接。
如果您尝试移动或重命名node.js源文件,请尝试使用此https://github.com/viruschidai/node-mv。它将更新所有其他文件中对该文件的引用。