【发布时间】:2020-01-24 16:31:51
【问题描述】:
我有一个本地 JSON 文件,我打算从 NodeJS 电子应用程序中读取/写入。我不确定,但我相信我应该使用 FileHandle 来避免多次打开和关闭操作,而不是使用 readFile() 和 writeFile()。
所以我试图从 fs.promises.open() 中获取 FileHandle,但问题似乎是我无法从现有文件中获取 FileHandle 而不将其截断并将其清除为 0。
const { resolve } = require('path');
const fsPromises = require('fs').promises;
function init() {
// Save table name
this.path = resolve(__dirname, '..', 'data', `test.json`);
// Create/Open the json file
fsPromises
.open(this.path, 'wx+')
.then(fileHandle => {
// Grab file handle if the file don't exists
// because of the flag 'wx+'
this.fh = fileHandle;
})
.catch(err => {
if (err.code === 'EEXIST') {
// File exists
}
});
}
我做错了吗?有更好的方法吗?
链接:
https://nodejs.org/api/fs.html#fs_fspromises_open_path_flags_mode
https://nodejs.org/api/fs.html#fs_file_system_flags
【问题讨论】:
-
你到底想完成什么?你不能很容易地修改 JSON,因为它是一种文本格式,所以如果有任何长度发生变化,你必须在之后重写所有内容。而且,JSON 不是一种可以轻松附加更多数据的格式。而且,在阅读方面,您也不能只阅读 JSON 的一部分。那么,你最终真正想要完成的是什么?你只是偶尔重写整个 JSON 吗?
-
如果您想定期将新的 JSON 重写到整个文件,只需在需要重写文件时调用
fs.writeFile()。尝试在两者之间保持文件打开,没有任何理由使事情复杂化。 -
仅供参考,如果文件已经存在,使用
x标志可确保失败。所以,不知道你为什么要使用那个标志? -
我正在尝试保存应用程序的用户首选项。我明白你在说什么,作为一个 JSON 文件,我必须始终读取、解析、更改、将它们重新写入整个文件。如果只是顺序数据,我可以将数据附加到文件末尾。
-
@jfriend00 抱歉,r 标志是错误的
标签: javascript node.js io fs