如何使用电子获取文件夹路径

How to get folder path using electron

我对电子很陌生。谁能建议我如何使用电子获取本地文件夹的相对路径? JavaScript 没有那个能力。

我有一个“选择文件”按钮(见快照),所以我的问题是,当我 select 一个文件夹并单击打开按钮时,它应该 return 整个目录路径。

为此您可以使用 Node 的 path.relative

正如@phuongle 在您要使用的评论中指出的那样showOpenDialog()。像这样:

var remote = require('remote');
var dialog = remote.require('electron').dialog;

var path = dialog.showOpenDialog({
    properties: ['openDirectory']
});

更新:如果以上内容不适用于您当前的 Electron 版本,您应该尝试更现代的导入:

const {dialog} = require('electron').remote;

此外,为了使用remote,您需要在主进程中创建window时设置enableRemoteModule

const myWindow = new BrowserWindow({
    webPreferences: {
        enableRemoteModule: true
    }
});

在 Electron 中,我们可以通过使用 type="file" 和 webkitdirectory 属性指定简单的输入元素来 select 目录。 <input id="myFile" type="file" webkitdirectory /> 我们可以通过文件对象 document.getElementById("myFile").files[0].path

的路径 属性 获取目录完整路径

我的解决方案是简单地使用小写字母,在我的 React 组件中使用值 true 作为字符串。无需额外配置。

像这样:

<input
    id="path-picker"
    type="file"
    webkitdirectory="true"
/>

编辑

原来像@cbartondock说的那样,会递归的去目录下找文件,不好!

我最终使用了所需的电子遥控器对话框。

关注官方IPC tutorial对我有用

主要流程:

import {dialog, ipcMain} from 'electron'
function createWindow () {
  mainWindow = new BrowserWindow({/*Your electron window boilerplate*/})
  ipcMain.handle('dialog:openDirectory', async () => {
    const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, {
      properties: ['openDirectory']
    })
    if (canceled) {
      return
    } else {
      return filePaths[0]
    }
  })
}

预加载脚本:

import {contextBridge, ipcRenderer} from 'electron'

contextBridge.exposeInMainWorld('myAPI', {
  selectFolder: () => ipcRenderer.invoke('dialog:openDirectory')
})

现在您可以从应用程序代码中调用 selectFolder 方法并获取用户输入。

window.myAPI.selectFolder().then(result=>{/* Do something with the folder path*/})