无法将文件复制到 Node.js 中的未知目录

问题描述

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
});