在Node.js中,fs.readFile不起作用

24

我有:

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

我不明白为什么会发生这种情况。


1
你在那个位置有这个文件吗?如果你是*NIX系统,请尝试使用 ls ../services/Prescipcion.xml 命令。 - thefourtheye
6个回答

67
错误信息显示“没有这样的文件或目录”,所以乍一看这很可能意味着文件路径不正确。
要么是文件名不正确(拼写错误?),要么是目录解析错误。注意,相对路径将根据process.cwd()解析:
您可以尝试使用console.log(process.cwd())来帮助您调试问题。
如果应该从脚本运行的位置本地检索文件Prescipcion.xml,您还可以使用以下结构: fs.readFileSync(path.join(__dirname,'../services')+ '/ Prescipcion.xml','utf8');

7
请注意,相对路径将根据process.cwd()解析。 - Martin Cup

13

对我有效

  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
一个对我有效的完整示例,基于其他答案。
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);
});

3

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


0
我也是个新手,这个path.join()让我头疼,但是当我直接硬编码目录时它就能工作。

0

你可以使用相对路径或绝对路径作为fs.readFile的参数,但问题是我被这个问题难住了:

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

那么如何解决这个问题呢?

很简单,你只需要在将其用作fs.readFile()的参数之前,在你想要的路径中用\\替换\即可:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接