在节点js中不起作用fs.readFile

时间:2015-10-26 10:04:10

标签: node.js file fs

我有:

 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' 
}

我不明白为什么会这样。

5 个答案:

答案 0 :(得分:20)

错误消息显示为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:当前正在执行的目录的名称   脚本驻留在。

答案 1 :(得分: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);
});

答案 2 :(得分:2)

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

答案 3 :(得分: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”);

答案 4 :(得分:0)

您可以使用相对路径或绝对路径作为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,"\\\\");