exam11/background/db/path.js
2025-09-09 22:35:44 +08:00

90 lines
2.8 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 fs = require('fs'); // 确保这行代码存在
const path = require('path');
const { app } = require('electron');
// 判断是否为开发环境
const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
// 检测是否为便携模式
let isPortable = false;
let appDir;
let portableFlagPath;
// 确保app已经初始化后再获取路径
if (app && app.getPath) {
try {
// 在Windows上使用process.execPath获取可执行文件路径
const exePath = process.execPath;
appDir = path.dirname(exePath);
portableFlagPath = path.join(appDir, 'portable.txt');
// 如果应用目录中存在portable.txt文件则启用便携模式
if (!isDev && fs.existsSync(portableFlagPath)) {
isPortable = true;
console.log('启用便携模式');
}
} catch (error) {
console.error('获取应用路径时出错:', error);
appDir = process.cwd();
}
} else {
appDir = process.cwd();
}
// 在第35行左右更新数据目录选择逻辑
// 根据模式选择数据目录
let dataDir;
if (isDev) {
// 开发环境数据存储在工程的data目录
dataDir = path.join(process.cwd(), 'data');
} else if (isPortable) {
// 便携模式数据存储在应用目录下的data文件夹
dataDir = path.join(appDir, 'data');
} else {
// 非便携模式数据存储在应用同级的data目录
dataDir = path.join(path.dirname(appDir), 'data');
}
// 增强路径处理:添加备选路径检测
if (!isDev && !fs.existsSync(dataDir) && fs.existsSync(path.join(appDir, 'data'))) {
console.log('检测到应用目录下存在data目录自动切换到便携模式');
dataDir = path.join(appDir, 'data');
isPortable = true;
}
// 确保数据目录存在
if (!fs.existsSync(dataDir)) {
try {
fs.mkdirSync(dataDir, { recursive: true });
console.log(`创建数据目录: ${dataDir}`);
} catch (mkdirError) {
console.error(`创建数据目录失败: ${dataDir}`, mkdirError);
// 作为最后的备选方案,使用当前工作目录
dataDir = process.cwd();
console.log(`备选数据目录: ${dataDir}`);
}
}
// 添加更多调试日志
console.log(`当前运行模式: ${isDev ? '开发环境' : (isPortable ? '便携模式' : '安装模式')}`);
console.log(`数据目录路径: ${dataDir}`);
console.log(`系统数据库路径: ${path.join(dataDir, 'system.db')}`);
console.log(`用户数据库路径: ${path.join(dataDir, 'user.db')}`);
// 系统数据库路径
function getSystemDbPath() {
return path.join(dataDir, 'system.db');
}
// 用户数据库路径
function getUserDbPath() {
return path.join(dataDir, 'user.db');
}
// 导出函数供其他模块使用
module.exports = {
getSystemDbPath,
getUserDbPath,
dataDir, // 导出数据目录路径,方便其他地方使用
isPortable // 导出便携模式状态
};