私が持っています:
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'
}
なぜこれが起こるのか分かりません。
それは私のために働いた
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");
エラーメッセージには_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
_:現在実行中のスクリプトが存在するディレクトリの名前。
他の答えに基づいて、私のために働いた完全な例
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);
});
WebアプリからExpressサーバーにデータを渡す場合、fsルートはサーバーのルートディレクトリではなく、Webアプリディレクトリの下にあります。したがって、最初のwriteFileパラメータは、サーバーディレクトリ外のディレクトリを指すか、サーバーファイルツリーにリンクする必要があります。
_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,"\\\\");
_