【问题标题】:Electron Dialog not saving the file电子对话框不保存文件
【发布时间】:2016-12-28 22:11:15
【问题描述】:

电子版:1.3.3 操作系统:Ubuntu 14.04

我想使用 Electron 将 XML 对象保存到 .xml 文件中。我试试这个:

const {dialog} = require("electron").remote; 
dialog.showSaveDialog(myObj)

一个新窗口正在打开,我填写了文件名但没有保存任何内容。

【问题讨论】:

    标签: javascript dialog electron


    【解决方案1】:

    showSaveDialog() API 不会为您保存文件。您必须使用返回的路径并使用 Node 来保存您的文件。

    const {dialog} = require('electron').remote;
    const fs = require('fs');
    
    dialog.showSaveDialog({}).then((result) => {
      fs.writeFile(result.filePath, MyFileData, (err) => {
        // file saved or err
      });
    }).catch((err) => {
      // err
    });
    

    【讨论】:

      【解决方案2】:

      建议在新版本的electron中使用dialog.showSaveDialog返回的路径来获取filepath:(在下面的代码中为result.filePath

          filename = dialog.showSaveDialog({}
          ).then(result => {
            filename = result.filePath;
            if (filename === undefined) {
              alert('the user clicked the btn but didn\'t created a file');
              return;
            }
            fs.writeFile(filename, content, (err) => {
              if (err) {
                alert('an error ocurred with file creation ' + err.message);
                return
              }
              alert('WE CREATED YOUR FILE SUCCESFULLY');
            })
            alert('we End');
          }).catch(err => {
            alert(err)
          })
      

      【讨论】:

      • 非常感谢。我花了一天的时间试图解决这个问题。
      • 但是点击取消btn就不行了。你应该写 if (filename == "") 因为 typeof(filename) 是 string 而 filename="" 在取消的情况下
      • 以前只使用result 作为文件名对我有用,现在它停止工作,我不得不使用result.filePath。是否有 API 更改?
      • @A.Donda before 2May2018(v2.0.0 之前)showSaveDialog 返回一个 callback(不是 Promise 直到 2019 年 7 月 20 日(版本 6.0.0))并且该回调只有一个参数那是filePath,但在 v2.0.0 之后,它开始获得更多选项 - 您可以查看 here 以查看按版本分类的文档
      猜你喜欢
      • 2017-08-25
      • 2021-03-17
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多