【问题标题】:fs.createReadStream is not finding filefs.createReadStream 没有找到文件
【发布时间】:2020-11-04 15:16:53
【问题描述】:

我现在正在学习 Node.js,使用的是“Beginning Node.js”教科书。

书中的例子在命令提示符下没有正确执行。 (我用的是 Ubuntu 18.04 和 Node v9.4.0,这本书是三年前的,所以这可能是相关的?)

在本书的可下载源代码中,提供了以下代码:

var fs = require('fs');

// Create readable stream
var readableStream = fs.createReadStream('./cool.txt');

// Pipe it to out stdout
readableStream.pipe(process.stdout);

文件cool.txt 位于父目录中。

--父文件夹

----jsFileToExecute.js

----cool.txt

当我在命令提示符下运行 node jsFileToExecute.js 时,我得到以下响应:

events.js:137
      throw er; // Unhandled 'error' event
      ^

Error: ENOENT: no such file or directory, open './cool.txt'

由于此源代码直接来自教科书出版商的网站,但它仍然无法运行,我假设它有问题?

寻找解决方案来找出这不起作用的原因。我查看了 nodejs.org 上的文档,但没有找到任何线索。

感谢您的帮助!

【问题讨论】:

  • 这是问题的一部分。我在目录的下部执行。 cd 进入正确的目录解决了这个问题。谢谢你,乔纳斯!下面的@hsz 还向我展示了如何使用path 模块解决问题。
  • ./ 指的是当前工作目录。见stackoverflow.com/a/50719600/3731501

标签: javascript node.js fs


【解决方案1】:

为避免路径问题,建议使用path.join,例如:

const path = require('path');

const coolPath = path.join(__dirname, 'cool.txt');
const readableStream = fs.createReadStream(coolPath);

在上面的示例中,您正在创建一个指向文件的路径,该文件引用存储在名为 __dirname 的全局变量中的脚本的当前目录。

【讨论】:

  • 这很棒。非常感谢!如果我没记错的话,path 是一个全局模块,可以自动处理相对路径的位置。那么,如果我稍后将这样的内容上传到网络上,path 模块会自动调整相对路径以考虑当前位置吗?非常感谢!
  • @SiddharthaKomodo 如果你觉得这个答案有帮助,记得接受它。
  • 太好了,谢谢!我现在就想办法接受。
【解决方案2】:

如果该文件位于当前您正在运行项目的同一目录中,那么您可以简单地键入文件名,而不是像此处一样提供 ./ 或 / 之类的路径:

var fs = require('fs');

// Create readable stream
var readableStream = fs.createReadStream('cool.txt');

// Pipe it to out stdout
readableStream.pipe(process.stdout);

它将像从同一目录中读取文件一样工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 2021-05-27
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多