fs.readFileSync无法读取nodejs中的文件传递路径变量
Posted
技术标签:
【中文标题】fs.readFileSync无法读取nodejs中的文件传递路径变量【英文标题】:fs.readFileSync Cannot read file passing path variable in nodejs 【发布时间】:2019-11-06 17:04:29 【问题描述】:我正在尝试使用 fs 读取 xml 文件。在将路径变量作为第一个参数传递给此函数后,我无法使用 fs.readFileSync 读取文件。 注意:这是在windows机器上
xmlFile="C:\Users\xyz\AppData\Local\.proxySettings.xml";
function myFunc(xmlFile)
let xmlData = fs.readFile(xmlFile);
alert(xmlData);//doesn't print anything
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlData,"text/xml");
....
....
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<proxy_port>2582</proxy_port>
在文件中更新
try
ffile="jdkdkj";
fs.readFileSync(ffile);
catch(err)
app.console.log(err);
Error errno: -4058, syscall: 'open', code: 'ENOENT', path: 'jdkdkj'
【问题讨论】:
请发布相关的代码部分,以便我们为您提供帮助 嗨,马克,我已经编辑了问题 您的代码显示let xmlData = fs.readFile(xmlFile);
永远不会工作,因为 fs.readFile()
是异步的,并且需要回调作为第二个参数来传达结果。此外,路径中的反斜杠必须进行双重转义。
我试过 readFileSync
让 io="C:\\cygwin64\\xyz\\tmp.txt"; var data=fs.readFileSync(io);警报(数据); //什么都不显示
【参考方案1】:
在 javascript 中,反斜杠字符用于表示紧跟在它后面的字符应该被特殊处理。为了在 JavaScript 字符串中创建文字反斜杠,您需要使用另一个反斜杠对反斜杠进行转义。
var a = "\abc";
console.log(a); // abc
var b = "\\abc";
console.log(b); // \abc
var c = "\"abc\"";
console.log(c); // "abc"
xmlFile="C:\\Users\\xyz\\AppData\\Local\\.proxySettings.xml";
console.log(xmlFile); // C:\Users\xyz\AppData\Local\.proxySettings.xml
因此,Windows 路径名在 JavaScript 中总是需要双反斜杠
【讨论】:
我试过这个 xmlFile = xmlFile.replace(/\\/g,'\\\\');但它仍然不打印文件内容 你应该可以做到 xmlFile="C:\\Users\\xyz\\AppData\\Local\\.proxySettings.xml";让 xmlData = fs.readFile(xmlFile); xmlFile 是否在您的代码中分配了一个路径名作为字符串文字?还是从数据库中读取? 那么你不需要replace(),使用双反斜杠应该可以。告诉我们进展如何 当我将路径变量作为第一个参数传递给 readFile 或 readFileSync 时,它没有读取文件 当我执行 fs.readFileSync("file-that-doesnt-exist") 时,我得到一个如下所示的异常: 错误:ENOENT:没有这样的文件或目录,在Object.openSync (fs.js:443:3) at Object.readFileSync (fs.js:343:35) errno: -2, syscall: 'open', code: 'ENOENT', path: 'foo' 你在吗看到类似的东西?以上是关于fs.readFileSync无法读取nodejs中的文件传递路径变量的主要内容,如果未能解决你的问题,请参考以下文章