我正在运行一个电子应用程序,在其渲染器进程中我使用 HTML5 localStorage。
我有兴趣知道这个 localStorage 实际存储在我的文件系统中的哪个位置(我相信它是 SQLite 格式)。
我在这里看到了 browser localStorage 存储在哪里的答案:
sessionStorage 和 localStorage 存储在哪里?
我问这个问题是因为我希望能够运行这个电子应用程序的 2 个实例,以便每个应用程序都有不同的设置,我将这些设置保存在 localStorage 中。
具体来说,我对 Windows 10 最感兴趣,但是包含所有操作系统的答案会很棒。
它存储在AppData文件夹中,您可以通过查看
require('electron').app.getPath('userData')
的值找到该文件夹。
这意味着即使应用程序被删除,数据仍然存在。如果您正在运行两个实例,您需要找到某种方法来区分它们,这样它们就不会破坏彼此的数据。
我必须在我的 Electron 应用程序中使用以下内容才能使其正常工作:
const remote = require('electron').remote;
const app = remote.app;
app.getPath('userData');
但是,它存储数据的路径是:
\Local Storage\leveldb\
所以你的整个路径将类似于:
C:\Users\<USER-NAME>\AppData\Roaming\<APP-NAME>\Local Storage\leveldb\
日志文件:不是 Sqlite DB 尽管浏览器(在我的例子中是 FireFox)将 localStorage 数据存储在 sqlite 文件中,但 Electron 似乎没有。
相反,它将数据保存在一个奇怪的 .log 文件中,我的文件名为
000003.log
。
这是我从应用程序控制台运行三个 localStorage.setItem() 命令后的样子。
这是我运行三个命令的 Electron 应用程序的控制台。如果仔细观察图像,您可以将命令与 000003.log 文件中的数据进行匹配。
进一步证明这是存储位置/机制
如果我在控制台中运行 localStorage.getItem("fakeData") 则返回该值。
但是,如果您:
您将不会获得任何回报。
现在完成循环:
您将再次看到价值。
LevelDB:谷歌之事
我正在考虑那种疯狂的格式,然后我想到了最终目录的名称(leveldb)。我做了一个 duckduckgo 并发现了这个: https://github.com/google/leveldb
所以我猜测这就是格式,因为 Electron 使用 Chrome 引擎。
LevelDB 是 Google 编写的开源磁盘键值存储 杰弗里·迪恩 (Jeffrey Dean) 和桑杰·格马瓦特 (Sanjay Ghemawat) 研究员。灵感来自 Bigtable、LevelDB 在新 BSD 许可证下托管在 GitHub 上,并且 已被移植到各种基于 Unix 的系统,macOS、Windows、 和安卓。
使用此代码,您可以在
Help
部分添加一个子部分,单击该部分将在文件资源管理器中打开本地存储文件夹。
在
main.js
中/electron
中:
const {
app,
BrowserWindow,
screen: electronScreen,
shell,
Menu,
} = require('electron');
...
const menuTemplate = [
{
role: 'help',
submenu: [
{
label: 'Open Local Storage Folder',
click: () => {
const userData = app.getPath('userData');
shell.showItemInFolder(`${userData}/Local Storage/leveldb`);
},
},
],
},
];
const menu = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menu);