问题描述
const { resolve } = require("path");
const prompt = require('prompt');
const fsPath = require('fs-path');
// Get files from Dir
const getFiles = dir => {
const stack = [resolve(dir)];
const files = [];
while (stack.length) {
dir = stack.pop();
fs.readdirsync(dir).forEach(item => {
const path = resolve(dir,item);
(fs.statSync(path).isDirectory() ? stack : files).push(path);
});
}
return files;
};
prompt.start();
// Prompt for Dir
prompt.get(['from','to'],async(err,res) => {
if (err) {
return console.log(err);
} else {
let fromFiles = await getFiles(String(res.from));
let toFiles = await getFiles(String(res.to));
let isEqual = JSON.stringify(fromFiles) == JSON.stringify(toFiles);
let out = res.to;
if (isEqual) {
return console.log('Both folders are same. Try it with an other folder!');
} else {
let dif = [];
// Check differences -> to path
await fromFiles.forEach(path => {
if (!toFiles.includes(path)) {
dif.push(path)
}
});
dif.forEach(difference => {
fsPath.copy(`${difference}`,`${out + difference.split(__dirname)[1]}`,(error) => {
if (error) {
console.log(error);
} else {
console.log('Successfully copied item.')
}
});
});
}
}
});
大家好,在上面的代码中,我只想复制“toFiles”文件夹中不存在的文件。 但是我有一个问题,如果我尝试使用 fsPath npm 包来做它,它会给出这样的错误“错误:ENOENT:没有这样的文件或目录”。通常,如果没有父文件夹,包应该创建父文件夹。但它不知何故不起作用。有人可以照顾代码并尝试修复它吗?非常感谢。
解决方法
文件夹不存在,您可以先用mkdir
创建文件夹:
fsPath.mkdir(String(res.to),{ recursive: true },(err) => {
if (err) throw err;
// code
});