在节点 js 中不起作用 fs.readFile
Not works fs.readFile in node js
我有:
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'
}
我不明白为什么会这样。
错误消息显示 no such file or directory
,所以乍一看这很可能意味着文件路径不正确。
文件名不正确(拼写错误?)或目录解析不正确。请注意,相对路径将针对 process.cwd()
:
进行解析
process.cwd()
: Returns the current working directory of the process.
您可以尝试使用 console.log(process.cwd())
来帮助您调试问题。
如果应该从脚本 运行 所在的位置本地检索文件 Prescipcion.xml
,您还可以使用以下结构:
fs.readFileSync(path.join(__dirname, '../services') + '/Prescipcion.xml', 'utf8');
__dirname
: The name of the directory that the currently executing
script resides in.
一个对我有用的完整示例,基于其他答案
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 参数必须指向服务器目录之外的目录,或者 link 指向服务器文件树。
对我有用
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");
您可以使用相对或绝对路径作为 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,"\\");
我有:
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'
}
我不明白为什么会这样。
错误消息显示 no such file or directory
,所以乍一看这很可能意味着文件路径不正确。
文件名不正确(拼写错误?)或目录解析不正确。请注意,相对路径将针对 process.cwd()
:
process.cwd()
: Returns the current working directory of the process.
您可以尝试使用 console.log(process.cwd())
来帮助您调试问题。
如果应该从脚本 运行 所在的位置本地检索文件 Prescipcion.xml
,您还可以使用以下结构:
fs.readFileSync(path.join(__dirname, '../services') + '/Prescipcion.xml', 'utf8');
__dirname
: The name of the directory that the currently executing script resides in.
一个对我有用的完整示例,基于其他答案
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 参数必须指向服务器目录之外的目录,或者 link 指向服务器文件树。
对我有用
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");
您可以使用相对或绝对路径作为 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,"\\");