我有一个名为“已接收”的文件夹,还有另外两个名为“成功”和“错误”的文件夹。 所有新文件都将存储在“已接收”文件夹中,并在存储在所述文件夹中后,将由我的系统处理。成功解析的文件将被移到“成功”文件夹,而所有有问题的文件将被存储在“错误”文件夹中。
我主要关心的是基本上在目录之间移动文件。
我已经尝试过了:
// oldPath = Received Folder
// sucsPath = Successful Folder
// failPath = Error Folder
// Checks if Successful or fail. 1 = Success; 0 = Fail
if(STATUS == '1') { // 1 = Success;
fs.rename(oldPath, sucsPath, function (err) {
if (err) {
if (err.code === 'EXDEV') {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(sucsPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close', function () {
fs.unlink(oldPath, callback);
});
readStream.pipe(writeStream);
}
else {
callback(err);
}
return;
}
callback();
});
}
else { // 0 = Fail
fs.rename(oldPath, failPath, function (err) {
if (err) {
if (err.code === 'EXDEV') {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(failPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close', function () {
fs.unlink(oldPath, callback);
});
readStream.pipe(writeStream);
}
else {
callback(err);
}
return;
}
callback();
});
}
但是我这里担心的是,它删除了原始文件夹并将所有文件传递到指定的文件夹中。我相信代码中的逻辑是,它从字面上重命名了文件(包括目录)。我还遇到了“ await moveFile”,但是它基本上做同样的事情。
我只想通过简单地指定文件名,文件的来源及其目的地来在目录之间移动文件。
答案 0 :(得分:0)
正如rufus1530所提到的,我使用了它:
fs.createReadStream(origin).pipe(fs.createWriteStream(destination));
下一步是删除文件。
我用了这个:
fs.unlinkSync(file);
答案 1 :(得分:0)
从8.5开始,您拥有fs.copyFile
,这是复制文件的最简单方法。
因此,您将创建自己的移动函数,该函数将首先尝试重命名,然后尝试复制。
const util = require('util')
const copyFile = util.promisify(fs.copyFile)
const rename = util.promisify(fs.rename)
const unlink = util.promisify(fs.unlink)
const path = require('path')
async function moveFileTo(file, dest) {
// get the file name of the path
const fileName = path.basename(file)
// combine the path of destination directory and the filename
const destPath = path.join(dest, fileName)
try {
await fs.rename(file, destPath)
} catch( err ) {
if (err.code === 'EXDEV') {
// we need to copy if the destination is on another parition
await copyFile(file, destPath)
// delete the old file if copying was successful
await unlink(file)
} else {
// re throw the error if it is another error
throw err
}
}
}
然后您可以使用await moveFileTo('/path/to/file.txt', '/new/path')
这样的方式来使用它,它将/path/to/file.txt
移到/new/path/file.txt
。