From 801099e786deeebbd6e4db8468d4a84f481fe964 Mon Sep 17 00:00:00 2001 From: VirtualHotBar Date: Tue, 2 Jun 2026 02:22:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20#51=20=E8=87=AA=E5=8A=A8=E5=88=86?= =?UTF-8?q?=E9=85=8D=E7=9B=98=E7=AC=A6=E4=B8=8E=E7=8E=B0=E6=9C=89=E7=9B=98?= =?UTF-8?q?=E7=AC=A6=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复 Rust 端 find_first_available_drive_letter() 函数中位掩码与盘符映射错误: - 原代码遍历 A-Z 但用 idx=25-i 反转检查位,导致返回的盘符与实际检查的位不匹配 - 修复为正确的遍历方式:从 i=25(Z) 到 i=0(A),确保盘符与位索引一致 同时在前端添加自动分配盘符后的重复检查: - 检查获取的可用盘符是否为空 - 检查获取的盘符是否已被其他挂载占用 --- src-tauri/src/utils.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 2bf7e49..6c4d6be 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -44,9 +44,10 @@ pub fn find_first_available_drive_letter() -> Result, io::Error> } // 从 Z 到 A 遍历,找第一个未被占用的盘符 - for (i, c) in ('A'..='Z').enumerate() { - let idx = 25 - i; // Z=25, Y=24, ..., A=0 - if drive_mask & (1 << idx) == 0 { + // 注意:位掩码中 bit 0 = A, bit 1 = B, ..., bit 25 = Z + for i in (0..26).rev() { + let c = (b'A' + i as u8) as char; + if drive_mask & (1 << i) == 0 { return Ok(Some(format!("{}:", c))); } }