😸
electron node.js ファイル書き込み読み込み 自分用備忘録
index.js(main.js)
const fs = require('fs');
const path = require('path');
//ipcmainの読み込みも忘れずに
const data_dir = path.join(app.getAppPath(), '01_soft_data'); // '01_soft_data'ディレクトリの絶対パス
const user_data_path = path.join(data_dir, 'user.json'); // 'user.json'ファイルの絶対パス
ipcMain.on('file_write', (event, json_data) => {
try {
if (!fs.existsSync(data_dir)) {
fs.mkdirSync(data_dir, { recursive: true });
console.log(`Directory created: ${data_dir}`);
}
// 2. 受け取ったデータ(通常はJavaScriptオブジェクト)をJSON文字列に変換
// 受け取り側で既に文字列化されている可能性もありますが、安全のためにチェック/変換
const data_to_write = typeof json_data === 'string' ? json_data : JSON.stringify(json_data, null, 2);
fs.writeFileSync(user_data_path, data_to_write, 'utf-8');
console.log(`JSON file written successfully to: ${user_data_path}`);
event.reply('file_write_reply', { success: true });
} catch (err) {
console.error('Error writing JSON file:', err);
event.reply('file_write_reply', { success: false, error: err.message });
}
});
ipcMain.on('file_read', (event) => {
try {
let file_content = null;
if (fs.existsSync(user_data_path)) {
file_content = fs.readFileSync(user_data_path, { encoding: 'utf-8' });
console.log(`JSON file read successfully from: ${user_data_path}`);
} else {
console.log(`JSON file not found at: ${user_data_path}. Returning empty data.`);
file_content = "{}";
}
event.reply('file_read_reply', { success: true, data: JSON.parse(file_content) });
} catch (err) {
console.error('Error reading JSON file:', err);
event.reply('file_read_reply', { success: false, error: err.message });
}
});
renderer.js
function init() {
window.addEventListener('DOMContentLoaded', () => {
doAThing()
})
}
// main からの呼び出しを待ち受ける
window.electron.ipcRenderer.on('async-test-complete', (event, message) => {
console.log(message)
})
function doAThing() {
const ipcHandlerBtn = document.getElementById('ipcHandler')
ipcHandlerBtn?.addEventListener('click', () => {
//window.electron.ipcRenderer.send('ping','test_message')
// データを準備
const userSettings = { theme: 'dark', fontSize: 14 };
// メインプロセスにデータを送信
window.electron.ipcRenderer.send('file_write', userSettings);
window.electron.ipcRenderer.send('file_read');
})
}
// メインプロセスからの応答を待つ
window.electron.ipcRenderer.on('file_write_reply', (event, result) => {
if (result.success) {
console.log('設定ファイルが正常に保存されました。');
} else {
console.error('設定ファイルの保存に失敗しました:', result.error);
}
});
// メインプロセスからの応答を待つ
window.electron.ipcRenderer.on('file_read_reply', (event, result) => {
if (result.success) {
console.log('設定ファイルが正常に読み込まれました');
console.log(result.data);
} else {
console.error('設定ファイルが読み込めませんでした:', result.error);
}
});
init()
Discussion