From 835572dabdd6bd9e184684e5f23d9d52147b3c84 Mon Sep 17 00:00:00 2001 From: momen Date: Fri, 27 Mar 2026 11:33:57 +0800 Subject: [PATCH] =?UTF-8?q?update:=E9=87=8D=E5=A4=8D=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E5=8C=85=E6=97=B6=E5=88=A0=E9=99=A4=E6=8E=89=E5=B7=B2=E6=9C=89?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main/backend/install-manager.ts | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/electron/main/backend/install-manager.ts b/electron/main/backend/install-manager.ts index e0e5d46e..e40efb74 100644 --- a/electron/main/backend/install-manager.ts +++ b/electron/main/backend/install-manager.ts @@ -357,6 +357,19 @@ async function processNextInQueue() { sendLog("Metalink 文件下载完成"); + // 清理下载目录中的旧文件(保留 .metalink 文件),防止 aria2c 因同名文件卡住 + const existingFiles = fs.readdirSync(downloadDir); + for (const file of existingFiles) { + if (file.endsWith(".metalink")) continue; + const filePath = path.join(downloadDir, file); + try { + fs.unlinkSync(filePath); + sendLog(`已清理旧文件: ${file}`); + } catch (err) { + logger.warn(`清理文件失败 ${filePath}: ${err}`); + } + } + // Aria2c const aria2Args = [ `--dir=${downloadDir}`, @@ -369,6 +382,7 @@ async function processNextInQueue() { "--max-concurrent-downloads=4", "--min-split-size=1M", "--lowest-speed-limit=1K", + "--auto-file-renaming=false", "-M", metalinkPath, ]; @@ -384,6 +398,17 @@ async function processNextInQueue() { if (retryCount > 0) { sendLog(`第 ${retryCount} 次重试下载...`); webContents?.send("install-progress", { id, progress: 0 }); + // 重试前也清理旧文件 + const retryFiles = fs.readdirSync(downloadDir); + for (const file of retryFiles) { + if (file.endsWith(".metalink")) continue; + const filePath = path.join(downloadDir, file); + try { + fs.unlinkSync(filePath); + } catch (cleanErr) { + logger.warn(`重试清理文件失败 ${filePath}: ${cleanErr}`); + } + } } try {