使用电子在本地保存文件

Posted

技术标签:

【中文标题】使用电子在本地保存文件【英文标题】:Saving files locally with electron 【发布时间】:2016-10-30 06:07:08 【问题描述】:

我有一些模板文件,每个文件都包含一些变量字符串,我想用 Electron (https://www.electronjs.org/) 构建一个非常简单的输入表单,并且我想将组合的输出文件保存在用户的计算机上。

有什么模块可以让 Electron 在本地保存文件吗?

【问题讨论】:

fs? @Zen 有没有办法用一个命令创建多个目录(即path/dirpath/dir2,...),或者是循环mkdir的唯一方法? 【参考方案1】:

如果您针对多个平台,我回答了a similar question here。基本上app.getPath(name)、app.setPath(name, path) 和app.getAppPath() 在将文件保存到正确的位置时非常有用,无论操作系统如何。

您可能还想查看这些有助于简化将文件直接保存到主机的 Nodejs 包...

fs-jetpack graceful-fs Node.js fs

如果您打算让用户保存文件,您还可以查看Dialog api,您可以在其中专门为此目的调用save dialog。

【讨论】:

我使用 app.getAppPath 创建了一个文件。您不得在托管电子应用程序的文件夹中创建文件。【参考方案2】:

示例代码是:

const fs = require('fs');
try  fs.writeFileSync('myfile.txt', 'the text to write in the file', 'utf-8'); 
catch(e)  alert('Failed to save the file !'); 

您当然可以将文件名和内容名存储在变量中。

这会将内容保存在myfile.txt 中,该目录位于当前工作目录内(您可以通过process.cwd() 获取)。如果你想写,比如说在用户的主目录,你可以使用app.getPath函数。

【讨论】:

这应该保存到哪里?似乎对我不起作用。 如何定义保存文件的具体路径 什么意思? 如果您像我一样指定相对路径,它将保存在您在当前目录下提供的路径上(例如C:\MyIncredibleFolder\myfile.txt)。如果您提供绝对路径,它会将文件保存在您提供的确切路径下。另外,如果你想知道你给出的相对路径会产生什么结果,你可以打印require('path').join(process.cwd(), "my/relative/path.txt")的结果 这会引发更多问题,然后才能回答。【参考方案3】:
const dialog = require('electron').remote;
var fs = require('fs');

export default 
    methods: 
        save: function () 
            var options = 
                title: "Save file",
                defaultPath : "my_filename",
                buttonLabel : "Save",

                filters :[
                    name: 'txt', extensions: ['txt'],
                    name: 'All Files', extensions: ['*']
                ]
            ;

            dialog.showSaveDialog(null, options).then(( filePath ) => 
                fs.writeFileSync(filePath, "hello world", 'utf-8');
            );
        ,
    

【讨论】:

优秀;这次真是万分感谢。我没有意识到 Electron 内置了这些功能。我的用例缺少新的File System Access API,因为我无法获得完整的选定路径。

以上是关于使用电子在本地保存文件的主要内容,如果未能解决你的问题,请参考以下文章

大开测试:性能- 如何下载并保存文件到本地(连载18)

用电子在本地保存html表格数据

将未保存的 Excel 文件附加到电子邮件

本地备异地保存份

本地备异地保存份

无法从本地文件系统下载 xml 文件