exam11/background/db/path.js
chenqiang b5a2c52dde path
2025-09-10 13:44:00 +08:00

80 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const path = require('path');
const fs = require('fs');
const { app } = require('electron');
// 判断是否为开发环境
const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
// 根据环境选择数据目录
let dataDir;
if (isDev) {
// 开发环境数据存储在工程的data目录
dataDir = path.join(process.cwd(), 'data');
} else {
try {
// 生产环境(便携模式)
// 1. 获取可执行文件所在目录
const exePath = process.execPath;
const exeDir = path.dirname(exePath);
// 2. 检查是否在临时目录中
const isTempDir = exeDir.toLowerCase().includes('temp') || exeDir.toLowerCase().includes('tmp');
if (isTempDir) {
// 3. 如果在临时目录,尝试多种方式寻找真实安装路径
// - 方式1通过可执行文件名回溯
const exeName = path.basename(exePath);
// - 方式2使用用户主目录下的固定文件夹
const userDataDir = path.join(app.getPath('userData'), 'StatExamData');
// 创建用户数据目录并使用
if (!fs.existsSync(userDataDir)) {
fs.mkdirSync(userDataDir, { recursive: true });
}
dataDir = userDataDir;
console.log(`检测到临时目录环境,数据目录已切换至: ${dataDir}`);
} else {
// 直接使用可执行文件所在目录下的data文件夹
dataDir = path.join(exeDir, 'data');
}
// 确保数据目录存在
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
console.log(`创建数据目录: ${dataDir}`);
}
} catch (error) {
console.error('获取数据目录失败:', error);
// 错误情况下使用用户数据目录作为后备
dataDir = path.join(app.getPath('userData'), 'StatExamData');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
}
}
// 输出调试信息
console.log('应用是否打包:', app.isPackaged);
console.log('数据目录路径:', dataDir);
// 系统数据库路径
function getSystemDbPath() {
return path.join(dataDir, 'system.db');
}
// 用户数据库路径
function getUserDbPath() {
return path.join(dataDir, 'user.db');
}
// 导出获取数据目录的方法,便于调试
function getDataDir() {
return dataDir;
}
module.exports = {
getSystemDbPath,
getUserDbPath,
getDataDir
};