【问题标题】:Not works fs.readFile in node js不适用于节点 js 中的 fs.readFile
【发布时间】:2016-01-25 09:20:26
【问题描述】:

我有:

 fs.readFile('../services/Prescipcion.xml', "utf8", function (err, data) {
    console.log("err->", err);
    console.log("data", data);
 });

它会记录:

err-> { 
  [Error: ENOENT: no such file or directory, open '../services/Prescipcion.xml']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '../services/Prescipcion.xml' 
}

我不明白为什么会这样。

【问题讨论】:

  • 你在那个位置有文件吗?如果你是*NIX,那么试试ls ../services/Prescipcion.xml

标签: node.js file fs


【解决方案1】:

错误信息是no such file or directory,所以乍一看这很可能意味着文件的路径不正确。

文件名不正确(错字?)或目录解析不正确。请注意,将针对 process.cwd() 解析相对路径:

process.cwd():返回进程的当前工作目录。

您可以尝试使用console.log(process.cwd()) 来帮助您调试问题。

如果文件Prescipcion.xml 应该从运行脚本的地方本地检索,您还可以使用以下构造:

fs.readFileSync(path.join(__dirname, '../services') + '/Prescipcion.xml', 'utf8');

__dirname: 当前执行的目录名 脚本驻留在其中。

【讨论】:

  • Take note that a relative path will be resolved against process.cwd() 很有帮助。
【解决方案2】:

它对我有用

  var fs = require("fs");

    const readFIle = path => {
      fs.readFile(__dirname + path, "utf8", (err, data) => {
        if (err) {
          console.log(err.stack);
          return;
        }
        console.log(data.toString());
      });
      console.log("Program Ended");
    };

用法:

readFIle("/input.txt");

【讨论】:

    【解决方案3】:

    一个对我有用的完整示例,基于其他答案

    var fs = require('fs');
    var path = require('path');
    var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
    let data = ''
    readStream.on('data', function(chunk) {
        data += chunk;
    }).on('end', function() {
        console.log(data);
    });
    

    【讨论】:

      【解决方案4】:

      当将数据从 Web 应用程序传递到 Express 服务器时,fs 根位于 Web 应用程序目录下,而不是服务器的根目录下。因此,第一个 writeFile 参数必须指向服务器目录之外的目录,或者链接到服务器文件树。

      【讨论】:

        【解决方案5】:

        你可以使用相对路径或绝对路径作为fs.readFile 参数,但关键是我对此感到困惑:

        如果你有 let path = 'c:\a\b\c.d 并且你想将它用作 fs.readFile(path, {'utf-8'}, (err, content) => {//...your stuffs}) 的 arg 你应该注意 \ 是 js 中的转义字符,所以 fs 阅读你的路径为c:abc.d,那么它将使用此路径作为相对路径,因此fs 将搜索C:\Users\dir_to_your_project\c:abc.d,这显然不是有效路径,并导致Error: ENOENT: no such file or directory... 错误

        那么如何解决这个问题?

        这很简单,您只需在所需路径中将\ 替换为\\,然后将其用作fs.readFile() 中的arg:

        new_path_for_fsReadFileArg = path.replace(/\\/g,"\\\\");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          • 2021-10-16
          • 2019-02-06
          • 2021-05-23
          • 1970-01-01
          相关资源
          最近更新 更多