[英]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.