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

问题描述 投票:0回答:6

我有:

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

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

node.js file fs
6个回答
66
投票

错误消息显示

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
:当前执行的目录名 脚本驻留在.


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 服务器时,fs 根目录位于 Web 应用程序目录下,而不是服务器的根目录下。因此,第一个 writeFile 参数必须指向服务器目录之外的目录,或者链接到服务器文件树。


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,"\\\\");

0
投票

我也是一个新手,这个 path.join() 让我很头疼,但是当我直接对目录进行硬编码时它就可以工作了

块引用

© www.soinside.com 2019 - 2024. All rights reserved.