如何在node.js上移动文件(如mv命令shell) ?是否有任何方法,或者我应该读取一个文件,写到一个新文件,并删除旧文件?
当前回答
如果你喜欢使用外部库,Shelljs是一个非常方便的解决方案。
命令: Mv ([options,] source, destination)
可用的选项:
-f: force(默认行为)
-n:防止覆盖
const shell = require('shelljs');
const status = shell.mv('README.md', '/home/my-dir');
if(status.stderr) console.log(status.stderr);
else console.log('File moved!');
其他回答
本地使用nodejs
var fs = require('fs')
var oldPath = 'old/path/file.txt'
var newPath = 'new/path/file.txt'
fs.rename(oldPath, newPath, function (err) {
if (err) throw err
console.log('Successfully renamed - AKA moved!')
})
(注意:“如果您正在跨分区或使用不支持移动文件的虚拟文件系统,这将不起作用。[…——Flavien Volken 15年9月2日12:50)
如果你喜欢使用外部库,Shelljs是一个非常方便的解决方案。
命令: Mv ([options,] source, destination)
可用的选项:
-f: force(默认行为)
-n:防止覆盖
const shell = require('shelljs');
const status = shell.mv('README.md', '/home/my-dir');
if(status.stderr) console.log(status.stderr);
else console.log('File moved!');
我将把所有涉及的函数(即重命名,复制,断开链接)彼此分离,以获得灵活性,并承诺一切,当然:
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只是一个方便的函数,我们可以分别应用这些函数,例如,当我们需要更细粒度的异常处理时。
使用rename函数:
fs.rename(getFileName, __dirname + '/new_folder/' + getFileName);
在哪里
getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName
假设您希望保持文件名不变。
这个例子摘自:Node.js in Action
move()函数,如果可能,将重命名或返回到复制
var fs = require('fs');
module.exports = function move(oldPath, newPath, callback) {
fs.rename(oldPath, newPath, function (err) {
if (err) {
if (err.code === 'EXDEV') {
copy();
} else {
callback(err);
}
return;
}
callback();
});
function copy() {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close', function () {
fs.unlink(oldPath, callback);
});
readStream.pipe(writeStream);
}
}
推荐文章
- 如何在Python中获得所有直接子目录
- ReferenceError: description没有定义NodeJs
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 将一个二进制的NodeJS Buffer转换为JavaScript的ArrayBuffer
- 如何在Ruby中创建文件
- AngularJS只适用于单页应用程序吗?
- __FILE__宏显示完整路径
- 如何在vue-cli项目中更改端口号
- 同步和异步编程(在node.js中)的区别是什么?
- 如何编辑通过npm安装的节点模块?
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段