使用 NodeJS 进行文件传输

问题描述 投票:0回答:1

我正在尝试使用 JavaScript 和 NodeJS 将一些文件从一个文件夹复制到另一个文件夹。我正在从文本文件中读取文件名来实现此目的,但只有最后一个文件被传输。

FileNames.txt
具有
F:/Some Folder/Origin Folder
中存在的文件的名称,我想将这些文件复制到
F:/Some Folder/Target Folder
中。
count
变量用于验证传输的文件数量。

function readFileContents() {
  fs.readFile(
    "F:/Some Folder/FileNames.txt",
    "utf8",
    (err, data) => {
      if (err) {
        console.log(err);
      } else {
        data.split("\n").forEach(d => transferFiles(d));
      }
      console.log(count);
    }
  );
}

function transferFiles(fileName) {
  fs.cp(
    `F:/Some Folder/Origin Folder/${fileName}`,
    `F:/Some Folder/Target Folder/${fileName}`,
    err => {
      if (err) {
        console.log(err);
      } else {
        console.log(`Transferred ${fileName}`);
        count++;
      }
    }
  );
}
javascript node.js file-transfer
1个回答
0
投票

所以,你的代码:

data.split("\n").forEach(d => transferFiles(d)); 

将开始所有传输并立即返回,无需等待任何传输完成。您显示的代码无法真正知道它们何时全部完成,也无法查看最终计数是多少,因为您没有跟踪一切何时完成。

我建议使用

await fs.promises.cp(...)
,这是该函数的 promise 版本,然后您可以
await
每个函数并按顺序执行它们,并且更容易知道它们何时全部完成。不要将
.forEach()
与异步代码一起使用,因为它不支持 Promise,也不会尊重 Promise。相反,只使用普通的
for
循环或
for/of
循环,这两者都是 Promise 和 wait 友好的。

© www.soinside.com 2019 - 2024. All rights reserved.