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

时间:2017-12-24 01:49:36

标签: electron

我想在用户计算机上存储图像,因此我认为它应该存储在用户数据文件夹中,如here所述。

  

app.getPath(name)

     

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

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

         Windows上的

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

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

  •   
  • ...
  •   

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

const app = require('electron');
alert(app.getPath('userData'));

但我得到" getPath不是一个功能"。我不知道该把它放在哪里。它不适用于我的html文件或渲染器文件,并且我不确定如何从主文件中使用它,因为它没有链接到网页。

5 个答案:

答案 0 :(得分:13)

通过this

计算出来
const remote = require('electron').remote;
const app = remote.app;
console.log(app.getPath('userData'));

答案 1 :(得分:8)

remote 被认为是危险的。

app.getPath 将在 main 进程中始终可用。

这里是如何在不使用 remote (electron 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
})

renderer

ipcRenderer.invoke('read-user-data', 'fileName.txt').then(result=> doSomething());

答案 2 :(得分:0)

防止错误“ getPath不是函数”的另一种方法是使代码在渲染器进程和主进程中均起作用:

const electron = require('electron');

const configDir =  (electron.app || electron.remote.app).getPath('userData');
console.log(configDir);

答案 3 :(得分:0)

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

const electron = require('electron');
export const userDataPath = (electron.app || electron.remote.app).getPath(
  'userData'
);

答案 4 :(得分:0)

我在使用 app.getPath('userData') 保存/加载配置文件等方面遇到了麻烦,同时最终使用了操作系统特定的环境变量:

const getAppBasePath = () => {
        //dev
    if (process.env.RUN_ENV === 'development') return './'

    if (!process.platform || !['win32', 'darwin'].includes(process.platform)) {
        console.error(`Unsupported OS: ${process.platform}`)
        return './'
    }
        //prod
    if (process.platform === 'darwin') {
        console.log('Mac OS detected')
        return `/Users/${process.env.USER}/Library/Application\ Support/${YOUR_APP_NAME}/`
    } else if (process.platform === 'win32') {
        console.log('Windows OS detected')
        return `${process.env.LOCALAPPDATA}\\${YOUR_APP_NAME}\\`
    }
}