/** * 跨平台文件大小计算工具 * 处理不同操作系统的文件大小差异 */ // 检测操作系统(网页端无 process.platform,返回 'web') export function getOS() { if (typeof process === 'undefined' || process.platform === undefined) return 'web' const platform = process.platform if (platform === 'win32') return 'windows' if (platform === 'darwin') return 'mac' if (platform === 'linux') return 'linux' return 'unknown' } // 获取基础单位大小 export function getBaseSize() { const os = getOS() // 不同操作系统的基础单位 const baseSizes = { windows: 1024, // Windows 使用 1024 进制 (二进制) mac: 1024, // macOS 使用 1024 进制 (十进制) linux: 1024, // Linux 使用 1024 进制 (十进制,遵循 SI 标准) web: 1024 // 网页端固定 1024 } return baseSizes[os] || 1024 } // 计算光盘类型大小 export function calculateDiscSize(sizeInGB, os = null) { const baseSize = os ? getBaseSizeForOS(os) : getBaseSize() return sizeInGB * Math.pow(baseSize, 3) } // 为特定操作系统获取基础大小 export function getBaseSizeForOS(os) { const baseSizes = { windows: 1024, // Windows 使用 1024 进制 (二进制) mac: 1024, // macOS 使用 1024 进制 (十进制) linux: 1024 // Linux 使用 1024 进制 (十进制,遵循 SI 标准) } return baseSizes[os] || 1024 } // 光盘类型配置 export function getDiscTypes(os = null) { const baseSize = os ? getBaseSizeForOS(os) : getBaseSize() return [ { value: 1, label: 'CD 700MB', size: 700 * Math.pow(1000, 2) }, { value: 2, label: 'DVD 4.7GB', size: 4.7 * Math.pow(1000, 3) }, { value: 3, label: 'DVD_DL 8.5GB', size: 8.5 * Math.pow(1000, 3) }, { value: 4, label: 'BD 25GB', size: 25 * Math.pow(1000, 3) }, { value: 5, label: 'BD_DL 50GB', size: 50 * Math.pow(1000, 3) }, { value: 6, label: 'BD_TL 100GB', size: 100 * Math.pow(1000, 3) }, { value: 7, label: 'BD_QL 128GB', size: 128 * Math.pow(1000, 3) } ] } // 格式化文件大小显示 export function formatFileSize(bytes, os = null) { if (!bytes || bytes < 0) return '0 B' const baseSize = os ? getBaseSizeForOS(os) : getBaseSize() const units = ['B', 'KB', 'MB', 'GB', 'TB'] let size = bytes let unitIndex = 0 while (size >= baseSize && unitIndex < units.length - 1) { size /= baseSize unitIndex++ } return `${size.toFixed(2)} ${units[unitIndex]}` } // 获取当前系统的光盘类型配置 export function getCurrentOSDiscTypes() { return getDiscTypes() } // 调试信息:显示当前系统配置 export function getDebugInfo() { const os = getOS() const baseSize = getBaseSize() const discTypes = getDiscTypes() return { os, baseSize, discTypes: discTypes.map(type => ({ ...type, formattedSize: formatFileSize(type.size) })) } }