【问题标题】:Accessing a network drive in nodejs?在nodejs中访问网络驱动器?
【发布时间】:2017-07-02 00:39:16
【问题描述】:

我正在尝试列出 S:/test 文件夹中的文件,该文件夹位于我的网络中(它不是本地目录)。我想知道如何做到这一点?到目前为止的代码如下所示:

const testFolder = 's:/test';
const fs = require('fs');
fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    console.log(file);
  });
})

我尝试将路径更改为 S:test, s:\test 无济于事,错误始终是“无法读取未定义的'forEach'”

【问题讨论】:

  • 请使用驱动器的完整地址(s 只是完整路径的简短版本)...这篇文章可能对您有所帮助stackoverflow.com/questions/34837954/…
  • 你说得对,我以为我已经尝试过了,但我错了。谢谢。
  • 也先捕获错误,if (err) return console.error(err) 或者更好地使用 Promisified fs

标签: javascript node.js networking


【解决方案1】:

如果这是 Windows(我假设是),那么您需要做几件事:

  1. 使用所需目录的完整路径(驱动器号可以,但您也可以在 Windows 中使用 UNC 路径)。
  2. 使用额外的反斜杠转义字符串定义中的所有反斜杠。
  3. 始终在您的 fs.readdir() 回调中使用错误处理,因此如果出现错误,您可以准确地看到错误是什么。

工作代码:

const fs = require('fs');
const testFolder = 's:\\test';

fs.readdir(testFolder, (err, files) => {
  if (err) return console.log(err);
  files.forEach(file => {
    console.log(file);
  });
});

我刚刚在自己的硬盘上尝试了这段代码,它运行良好。


而且,仅供参考,我现在在现代 node.js 中几乎总是使用 ES6 for/of 而不是 .forEach(),因为它对解释器来说效率更高,并且它为您提供更多循环控制(例如,您可以使用 @987654325 @ 退出循环)。

const testFolder = 's:\\test';
const fs = require('fs');

fs.readdir(testFolder, (err, files) => {
  if (err) return console.log(err);
  for (let file of files) {
    console.log(file);
  }
});

【讨论】:

  • 太好了,感谢您的彻底回复!使用 for 真的更高效吗?
  • for/of 或 Promise.all() 如果你正在获取
  • 太棒了!很有帮助
  • 对于 mac 呢?
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
相关资源
最近更新 更多