From 639ee640524f51e1d890a572b41e808db142d73d Mon Sep 17 00:00:00 2001 From: chenqiang Date: Wed, 10 Sep 2025 13:08:03 +0800 Subject: [PATCH] copyData --- background/db/path.js | 55 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/background/db/path.js b/background/db/path.js index 7ece533..e877a39 100644 --- a/background/db/path.js +++ b/background/db/path.js @@ -21,16 +21,10 @@ if (isDev) { const isTempDir = exeDir.toLowerCase().includes('temp') || exeDir.toLowerCase().includes('tmp'); if (isTempDir) { - // 3. 如果在临时目录,尝试多种方式寻找真实安装路径 - // - 方式1:通过可执行文件名回溯 - const exeName = path.basename(exePath); - // - 方式2:使用用户主目录下的固定文件夹 + // 3. 如果在临时目录,使用用户主目录下的固定文件夹 const userDataDir = path.join(app.getPath('userData'), 'StatExamData'); // 创建用户数据目录并使用 - if (!fs.existsSync(userDataDir)) { - fs.mkdirSync(userDataDir, { recursive: true }); - } dataDir = userDataDir; console.log(`检测到临时目录环境,数据目录已切换至: ${dataDir}`); @@ -44,6 +38,9 @@ if (isDev) { fs.mkdirSync(dataDir, { recursive: true }); console.log(`创建数据目录: ${dataDir}`); } + + // 添加数据库文件复制逻辑 + copyDatabaseFilesIfNeeded(dataDir); } catch (error) { console.error('获取数据目录失败:', error); // 错误情况下使用用户数据目录作为后备 @@ -54,6 +51,50 @@ if (isDev) { } } +/** + * 检查并复制数据库文件 + * @param {string} targetDataDir - 目标数据目录 + */ +function copyDatabaseFilesIfNeeded(targetDataDir) { + try { + // 定义数据库文件名 + const dbFiles = ['system.db', 'user.db', '.gitignore']; + + // 定义源数据目录(resources中的data目录) + const sourceDataDir = path.join(process.resourcesPath, 'data'); + + console.log(`检查是否需要从${sourceDataDir}复制数据库文件到${targetDataDir}`); + + // 检查源数据目录是否存在 + if (!fs.existsSync(sourceDataDir)) { + console.warn(`源数据目录不存在: ${sourceDataDir}`); + return; + } + + // 检查并复制每个文件 + dbFiles.forEach(fileName => { + const targetFilePath = path.join(targetDataDir, fileName); + const sourceFilePath = path.join(sourceDataDir, fileName); + + // 只有当目标文件不存在时才复制 + if (!fs.existsSync(targetFilePath) && fs.existsSync(sourceFilePath)) { + try { + fs.copyFileSync(sourceFilePath, targetFilePath); + console.log(`成功复制文件: ${fileName} 到 ${targetDataDir}`); + } catch (copyError) { + console.error(`复制文件${fileName}失败:`, copyError); + } + } else if (fs.existsSync(targetFilePath)) { + console.log(`文件已存在,跳过复制: ${fileName}`); + } else { + console.warn(`源文件不存在: ${sourceFilePath}`); + } + }); + } catch (error) { + console.error('复制数据库文件时发生错误:', error); + } +} + // 输出调试信息 console.log('应用是否打包:', app.isPackaged); console.log('数据目录路径:', dataDir);