簡體   English   中英

Electron 對話框不保存文件

[英]Electron Dialog not saving file

我正在嘗試遵循本教程,它包括按下按鈕的部分。 這將打開一個對話框 window 以將文本框的內容保存為文本文件。 這包含在main.js文件中。 但是,當我運行它時,window 打開,但是當我按下保存時,沒有文件被保存。

const ipcMain = require('electron').ipcMain
const fs = require('fs')
const { dialog } = require('electron')

ipcMain.on('clickedbutton', (event, data) => {

    dialog.showSaveDialog({ 
        filters: [{ name: 'text', extensions: ['txt'] }
        ]},function (fileName) {

            if(fileName === undefined) return
            fs.writeFile(fileName, data, function (err) {

            })

     });

})

我不明白如何將fileName參數傳遞給 function。 然后,我嘗試按照此 SO question中的建議將對話框 window 調用和 function 分開,但這里的 fileName 是 object 不起作用。

ipcMain.on('clickedbutton',(event,data) => {

    var fileName = dialog.showSaveDialog({});

    fs.writeFile(fileName,data,function(err){});

})

我錯過了什么?

您鏈接的教程已過時。 dialog函數在 Electron 6 中發生了變化,從基於回調的 API(您的代碼中有)更改為基於承諾的函數。

對於 Electron >= 6,您希望在async function 中執行以下操作。 請注意,如果要同步運行 function,可以用dialog.showSaveDialogSync替換此 function。

  const { filePath, canceled } = await dialog.showSaveDialog({
    defaultPath: "text.txt"
  });

  if (filePath && !canceled) {
    const data = new Uint8Array(Buffer.from('Hello Node.js'));
    fs.writeFile(filePath, data, (err) => {
      if (err) throw err;
      console.log('The file has been saved!');
    });
  }

請注意選項從filters更改為defaultPath ,因為我假設您要設置默認文件名,而不是渲染對話框無法選擇的不是text.txt的現有文件。

請參閱Electron Fiddle中可打開的最小示例 在此示例中,對話框在瀏覽器 window 打開時直接打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM