oihi08
oihi08

Reputation: 735

Not works fs.readFile in node js

I have:

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

And it logs:

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

I don't understand why this happens.

Upvotes: 24

Views: 52669

Answers (6)

clyder sparks
clyder sparks

Reputation: 11

I am also a newbie and this path.join() is giving me a headache but when I hard code the directory directly it works

Upvotes: 0

you can use relative or absolute path as fs.readFile argument , but the point is that i got stumped with this was:

if you have let path = 'c:\a\b\c.d and you want to use it as an arg for fs.readFile(path, {'utf-8'}, (err, content) => {//...your stuffs}) you should take care that \ is an escape character in js, so fs read your path as c:abc.d then it will use this path as a relative path so fs will search for C:\Users\dir_to_your_project\c:abc.d which is obviously not a valid path and it results in a Error: ENOENT: no such file or directory... error

so how to fix this issue?

it's very simple you should just replace \ with \\ in your desired path before using it as an arg in fs.readFile():

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

Upvotes: 0

Hitesh Sahu
Hitesh Sahu

Reputation: 45160

It worked for me

  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");
    };

usage:

readFIle("/input.txt");

Upvotes: 13

ang
ang

Reputation: 1581

When passing data over from a Web App to an Express server, the fs root resides under the Web App directory and NOT the server's root directory. Therefore, the first writeFile parameter must point to a directory outside the server directory, or link over to the server file tree.

Upvotes: 3

iamnotsam
iamnotsam

Reputation: 10448

A full example that worked for me, based on other answer

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);
});

Upvotes: 4

xaviert
xaviert

Reputation: 5942

The error message says no such file or directory, so at first sight this most likely means the path to the file is incorrect.

Either the filename is incorrect (typo?) or the directory is incorrectly resolved. Take note that a relative path will be resolved against process.cwd():

process.cwd(): Returns the current working directory of the process.

You can try using console.log(process.cwd()) to help you debug the issue.

If the file Prescipcion.xml should be retrieved locally from where the script is run, you can also use the following construct:

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

__dirname: The name of the directory that the currently executing script resides in.

Upvotes: 73

Related Questions