exam11/background/db/path.js
chenqiang 09fe18856a path
2025-09-10 12:18:40 +08:00

83 lines
2.4 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 isPortable = false;
let dataDir;
if (isDev) {
// 开发环境数据存储在工程的data目录
dataDir = path.join(process.cwd(), 'data');
} else {
try {
// 关键修改使用process.argv[0]获取实际启动路径
const exePath = process.argv[0];
let appDir = path.dirname(exePath);
console.log('实际可执行文件路径:', exePath);
console.log('实际应用目录:', appDir);
// 检测是否存在portable.txt标记文件
const portableFlagPath = path.join(appDir, 'portable.txt');
isPortable = fs.existsSync(portableFlagPath);
// 如果在临时目录中运行且未找到标记文件
const isTempDir = appDir.includes('Temp') || appDir.includes('tmp');
if (isTempDir && !isPortable) {
// 尝试通过遍历上级目录寻找portable.txt来确定实际应用目录
let currentDir = appDir;
// 最多向上查找5级目录
for (let i = 0; i < 5; i++) {
currentDir = path.dirname(currentDir);
const checkFlagPath = path.join(currentDir, 'portable.txt');
if (fs.existsSync(checkFlagPath)) {
appDir = currentDir;
isPortable = true;
console.log('在上级目录找到便携模式标记:', appDir);
break;
}
}
}
// 设置数据目录为应用目录下的data文件夹
dataDir = path.join(appDir, 'data');
console.log('最终数据目录:', dataDir);
// 确保便携模式标记文件存在
if (isPortable) {
const flagPath = path.join(appDir, 'portable.txt');
if (!fs.existsSync(flagPath)) {
fs.writeFileSync(flagPath, '');
}
}
} catch (error) {
console.error('确定数据目录时出错:', error);
// 出错时使用应用数据目录作为后备
dataDir = path.join(app.getPath('userData'), 'data');
}
}
// 确保数据目录存在
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
};