web-dev-qa-db-ja.com

ノードjsのfs.readFileでは機能しません

私が持っています:

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

なぜこれが起こるのか分かりません。

12
oihi08

それは私のために働いた

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

7
Hitesh Sahu

エラーメッセージには_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_:現在実行中のスクリプトが存在するディレクトリの名前。

30
xaviert

他の答えに基づいて、私のために働いた完全な例

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
iamnotsam

WebアプリからExpressサーバーにデータを渡す場合、fsルートはサーバーのルートディレクトリではなく、Webアプリディレクトリの下にあります。したがって、最初のwriteFileパラメータは、サーバーディレクトリ外のディレクトリを指すか、サーバーファイルツリーにリンクする必要があります。

2
Matthew

_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