Electron でダイアログを開いてファイルを開く/保存
pify を使用してPromise化した。
const fs = require('fs')
const pify = require('pify')
const { BrowserWindow, dialog } = require('electron').remote
/**
* ダイアログで任意のファイルを開く
* @param dialogOptions
* @param fileOptions
* @returns {Promise<undefined>}
*/
export const openFileDialog = async (dialogOptions, fileOptions = 'utf8') => {
const win = BrowserWindow.getFocusedWindow()
const fileNames = await pify(
dialog.showOpenDialog(win, {
...dialogOptions,
properties: ['openFile'],
})
)
return fileNames ? readFile(fileNames[0], fileOptions) : undefined
}
/**
* ダイアログで任意のファイル保存
* TODO: openFileDialog と同様に pify を使用して Promise化して実行結果を返したい。
* @param data
* @param options
*/
export const saveFileDialog = (data, options = {}) => {
const win = BrowserWindow.getFocusedWindow()
dialog.showSaveDialog(win, options, fileName => {
writeFile(fileName, data)
})
}
/**
* 指定したファイルを読み込む
* @param path
* @param option
* @returns {Buffer}
*/
export const readFile = (path, option) => {
return fs.readFileSync(path, option)
}
/**
* fileを保存(Pathと内容を指定)
* @param path
* @param data
*/
export const writeFile = (path, data) => {
return fs.writeFileSync(path, data)
}