如何使用电子的app.getPath()来存储数据?

sta*_*ers 7 electron

我想存储的用户计算机上的图像,所以我想,这应该存储在用户数据文件夹,如所描述这里.

app.getPath(name)

name.返回String - 指向与name关联的特殊目录或文件的路径.失败时会抛出错误.您可以通过名称请求以下路径:

  • home 用户的主目录
  • appData 每用户应用程序数据目录,默认情况下指向:

    Windows $ XDG_CONFIG_HOME上的%APPDATA%或Linux上的〜/ .config~/macOS上的应用程序支持

  • userData 用于存储应用程序配置文件的目录,默认情况下,它是附加了应用程序名称的appData目录.

  • ...

这就是我认为你应该做的事情:

const app = require('electron');
alert(app.getPath('userData'));
Run Code Online (Sandbox Code Playgroud)

但我得到"getPath不是一个函数".我不知道该把它放在哪里.它不能从我的html文件或渲染器文件中工作,我不知道如何从主文件中使用它,因为它没有链接到网页.

sta*_*ers 19

想通了这个想法

const remote = require('electron').remote;
const app = remote.app;
console.log(app.getPath('userData'));
Run Code Online (Sandbox Code Playgroud)

  • 我收到 Uncaught TypeError:无法读取未定义的属性“getPath” (3认同)

Has*_*Eqx 11

remote 被认为是危险的。

app.getPath将始终可用main

以下是如何在不使用remote(电子 7+)的情况下在渲染器进程中执行此操作

基本上你必须invoke在渲染器中使用。

main

ipcMain.handle('read-user-data', async (event, fileName) => {
  const path = electron.app.getPath('userData');
  const buf = await fs.promises.readFile(`${path}/${fileName));
  return buf
})
Run Code Online (Sandbox Code Playgroud)

renderer

ipcRenderer.invoke('read-user-data', 'fileName.txt').then(result=> doSomething());
Run Code Online (Sandbox Code Playgroud)


nik*_*mac 8

这是我需要在开发和发布之间切换时使用的

const electron = require('electron');
export const userDataPath = (electron.app || electron.remote.app).getPath(
  'userData'
);
Run Code Online (Sandbox Code Playgroud)

  • 似乎这种方法与开发和发布无关,而是与主进程和渲染进程有关。使用短路评估可以在主进程和渲染器进程中使用此代码。那么,这个答案与 @RedSandman 的答案不同吗? (3认同)

Red*_*man 6

另一种防止错误“getPath is not a function”的方法是让代码在渲染器进程和主进程中都能工作:

const electron = require('electron');

const configDir =  (electron.app || electron.remote.app).getPath('userData');
console.log(configDir);
Run Code Online (Sandbox Code Playgroud)