exam11/background/db/path.js
2025-09-10 11:51:13 +08:00

86 lines
2.9 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.

// 添加缺失的path模块导入
const path = require('path');
const fs = require('fs');
const { app } = require('electron');
// 判断是否为开发环境
const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
// 检测是否为便携模式
let isPortable = false;
let appDir;
let dataDir;
// 调试信息
console.log('环境检测:');
console.log('- 开发环境:', isDev);
console.log('- 当前工作目录:', process.cwd());
console.log('- 可执行文件路径:', app.getPath('exe'));
if (isDev) {
// 开发环境数据存储在工程的data目录
dataDir = path.join(process.cwd(), 'data');
console.log('开发环境数据目录:', dataDir);
} else {
// 非开发环境:确定应用目录
const exePath = app.getPath('exe');
appDir = path.dirname(exePath);
console.log('应用目录:', appDir);
// 检测便携模式的多种可能性
// 1. 检查可执行文件同级目录是否有data文件夹
const dataPathSameLevel = path.join(appDir, 'data');
// 2. 检查可执行文件所在目录是否为portable-app如果是检查其父目录下是否有data
const isPortableAppDir = path.basename(appDir) === 'portable-app';
const dataPathParentLevel = isPortableAppDir ? path.join(path.dirname(appDir), 'data') : null;
// 3. 检查可执行文件同级目录是否有portable-app/data文件夹
const dataPathInPortableApp = path.join(appDir, 'portable-app', 'data');
console.log('检测便携模式:');
console.log('- 同级data目录存在:', fs.existsSync(dataPathSameLevel));
if (isPortableAppDir) {
console.log('- 父级data目录存在:', fs.existsSync(dataPathParentLevel));
}
console.log('- portable-app/data目录存在:', fs.existsSync(dataPathInPortableApp));
// 优先级顺序同级data > portable-app内data > 父级data
if (fs.existsSync(dataPathSameLevel)) {
dataDir = dataPathSameLevel;
isPortable = true;
console.log('使用同级data目录:', dataDir);
} else if (fs.existsSync(dataPathInPortableApp)) {
dataDir = dataPathInPortableApp;
isPortable = true;
console.log('使用portable-app内data目录:', dataDir);
} else if (isPortableAppDir && fs.existsSync(dataPathParentLevel)) {
dataDir = dataPathParentLevel;
isPortable = true;
console.log('使用父级data目录:', dataDir);
} else {
// 默认使用用户数据目录
dataDir = path.join(app.getPath('userData'), 'data');
console.log('使用用户数据目录:', dataDir);
}
}
// 确保数据目录存在
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
console.log(`创建数据目录: ${dataDir}`);
}
// 系统数据库路径
function getSystemDbPath() {
return path.join(dataDir, 'system.db');
}
// 用户数据库路径
function getUserDbPath() {
return path.join(dataDir, 'user.db');
}
// 导出函数供其他模块使用
module.exports = {
getSystemDbPath,
getUserDbPath
};