【问题标题】:Electron Dialog filePath "\\" to "/"?电子对话框文件路径“\\”到“/”?
【发布时间】:2021-09-19 18:13:17
【问题描述】:

我在电子中打开一个对话框来选择一个文件夹,我想读出文件路径。 但是 result.filePaths 给了我一个带有 \\ 的文件路径,这对我来说是不可行的,以便稍后读取文件夹中的文件。 ????

现在的结果:

"P:\\Social Media\\Soundboard\\Sounds"

预期结果:

“P:/社交媒体/音板/声音”

有没有办法把它转换成“/”? ????

我的代码:

const dialog = require('electron').remote.dialog

dialog.showOpenDialog({
    properties: ['openDirectory', 'multiSelections']
}).then(result => { 

 //Get Selected Folders
 folderpath = result.filePaths
 console.log(folderpath)
});

【问题讨论】:

  • 文件路径包含\\ 的问题是什么?
  • 我想读取目录中的所有声音文件,使用 fs.readdir 它不会读取文件路径,我认为这是因为格式。 ??????

标签: javascript json windows electron dialog


【解决方案1】:

Windows 使用\ 而不是/ 来分隔嵌套资源。但它支持两者。如果您仍想将\\ 转换为/。你可以试试下面的方法。

//Get Selected Folders
 folderpath = result.filePaths.replaceAll('\\', '/');
 console.log(folderpath);

【讨论】:

  • 我做到了。谢谢,我在 JS 中学到了一些新东西。 replaceAll 以后也很方便 ^^
【解决方案2】:

这是我开发电子应用程序以在 unix 和 windows 上运行而没有任何问题的方法。

我没有使用path 模块函数,而是使用下面的模块扩展了该功能并改为调用它。这将清理所有路径并将它们转换为正确的 unix 路径,例如“/var/path/file”或“C:/path/file”。

Windows 实际上可以使用 unix 路径来创建/读取/更新/移动文件和文件夹。

export default {
  extname (file) {
    return path.extname(file)
  },

  resolve () {
    return this.sanitizePath(Array.from(arguments).join('/').replace('//', '/'))
  },

  normalize () {
    const file = this.resolve(...arguments)
    return this.sanitizePath(path.normalize(file))
  },

  basename (file, ext = '') {
    return this.sanitizePath(path.basename(file, ext))
  },

  dirname (file) {
    return this.sanitizePath(path.dirname(file))
  },

  relative (from, to) {
    return this.sanitizePath(path.relative(path.resolve(from), path.resolve(to)))
  },

  sanitizePath (absPath) {
    // fix windows separator
    return absPath.replaceAll(path.sep, '/')
  }
}

我唯一需要 Windows 特定路径的时候是 shell.moveItemToTrash(file),为此我必须使用这个客户端函数

convertPathForWin (file, os = navigator.platform) {
    return (os.toLowerCase() === 'win32') ? file.replaceAll('/', '\\') : file
}

【讨论】:

  • 嗯。有趣的。我还没有考虑过 unix,但如果我在 Linux 和 MacOS 上测试我的应用程序,也许以后它会变得有用。但是现在Windows是第一位的?谢谢你的回复?
  • 如果您使用的是 Electron,那么不将您的应用程序部署到 linux 和 mac 是一种耻辱。
  • 不,我也想将它用于 Linux 和 MacOS。但是对于任何平台,我都必须进行一些优化和代码更改。由于很多 Soundboard 应用程序的问题,我决定创建自己的。在发布之前,我为所有平台构建了它,别担心? 我通常更多地从事 Web 前端工作,所以我首先选择了 Electron,因为它具有简单的开发体验。但我必须在这段旅程中学到很多东西^^
猜你喜欢
  • 2011-03-05
  • 2017-12-04
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2015-10-22
相关资源
最近更新 更多