即使路径正确,也无法在节点中找到文件
Cannot find file in Node even though it has correct path
执行此代码后:
const filename = "../../.dburl"
const url = fs.readFileSync(filename, 'utf-8')
我收到以下错误:
Error: ENOENT: no such file or directory, open '../../.dburl'
目前我所知道的:
1) 文件路径正确。
2) 我的应用程序具有读取该文件的权限。
3) .dburl 即使存储在与应用程序相同的目录中也不会被读取。
非常感谢任何帮助...谢谢!
我猜您混淆了脚本的当前工作目录和脚本的位置。如果不知道项目的结构以及从何处调用脚本,则很难说。
假设您的 shell 的工作目录是 /
,.dburl
位于 /.dburl
而您的脚本位于 /foo/bar/script.js
。如果你 运行 node foo/bar/script
,你可以用 readFileSync('./dburl')
阅读 .dburl
。但是,如果您 运行 cd foo/bar; node ./script
,则需要阅读 .dburl
和 readFileSync('../../.dburl')
。
这是因为您的脚本的工作目录等于您启动它的 shell 的工作目录。
您可以使用 module-level 变量“__dirname”获取包含当前脚本的目录。然后就可以用path.resolve来使用相对路径了
console.log('Path of file in parent dir:', require('path').resolve(__dirname, '../app.js'));
正在同一级别阅读文件
//the server object listens on port 8080
const PORT = 8080;
var http = require("http");
var fs = require("fs");
var path = require("path");
//create a server object:
http
.createServer((req, res) => {
console.log("READING FILE: ", path.resolve(__dirname, "input.txt"));
fs.readFile(path.resolve(__dirname, "input.txt"), (err, data) => {
//error handling
if (err) return console.error(err);
//return file content
console.log("FILE CONTENT: " + data.toString());
res.write(data.toString());
res.end();
console.log("READ COMPLETED");
});
})
.listen(PORT);
正在阅读其他级别的文件:
//the server object listens on port 8080
const PORT = 8080;
var http = require("http");
var fs = require("fs");
var path = require("path");
//create a server object:
http
.createServer((req, res) => {
console.log("READING FILE: ", path.resolve(__dirname, "./mock/input.txt"));
fs.readFile(path.resolve(__dirname, "./mock/input.txt"), (err, data) => {
//error handling
if (err) return console.error(err);
//return file content
console.log("FILE CONTENT: " + data.toString());
res.write(data.toString());
res.end();
console.log("READ COMPLETED");
});
})
.listen(PORT);
执行此代码后:
const filename = "../../.dburl"
const url = fs.readFileSync(filename, 'utf-8')
我收到以下错误:
Error: ENOENT: no such file or directory, open '../../.dburl'
目前我所知道的:
1) 文件路径正确。
2) 我的应用程序具有读取该文件的权限。
3) .dburl 即使存储在与应用程序相同的目录中也不会被读取。
非常感谢任何帮助...谢谢!
我猜您混淆了脚本的当前工作目录和脚本的位置。如果不知道项目的结构以及从何处调用脚本,则很难说。
假设您的 shell 的工作目录是 /
,.dburl
位于 /.dburl
而您的脚本位于 /foo/bar/script.js
。如果你 运行 node foo/bar/script
,你可以用 readFileSync('./dburl')
阅读 .dburl
。但是,如果您 运行 cd foo/bar; node ./script
,则需要阅读 .dburl
和 readFileSync('../../.dburl')
。
这是因为您的脚本的工作目录等于您启动它的 shell 的工作目录。
您可以使用 module-level 变量“__dirname”获取包含当前脚本的目录。然后就可以用path.resolve来使用相对路径了
console.log('Path of file in parent dir:', require('path').resolve(__dirname, '../app.js'));
正在同一级别阅读文件
//the server object listens on port 8080
const PORT = 8080;
var http = require("http");
var fs = require("fs");
var path = require("path");
//create a server object:
http
.createServer((req, res) => {
console.log("READING FILE: ", path.resolve(__dirname, "input.txt"));
fs.readFile(path.resolve(__dirname, "input.txt"), (err, data) => {
//error handling
if (err) return console.error(err);
//return file content
console.log("FILE CONTENT: " + data.toString());
res.write(data.toString());
res.end();
console.log("READ COMPLETED");
});
})
.listen(PORT);
正在阅读其他级别的文件:
//the server object listens on port 8080
const PORT = 8080;
var http = require("http");
var fs = require("fs");
var path = require("path");
//create a server object:
http
.createServer((req, res) => {
console.log("READING FILE: ", path.resolve(__dirname, "./mock/input.txt"));
fs.readFile(path.resolve(__dirname, "./mock/input.txt"), (err, data) => {
//error handling
if (err) return console.error(err);
//return file content
console.log("FILE CONTENT: " + data.toString());
res.write(data.toString());
res.end();
console.log("READ COMPLETED");
});
})
.listen(PORT);