fix: #51 自动分配盘符与现有盘符冲突

修复 Rust 端 find_first_available_drive_letter() 函数中位掩码与盘符映射错误:
- 原代码遍历 A-Z 但用 idx=25-i 反转检查位,导致返回的盘符与实际检查的位不匹配
- 修复为正确的遍历方式:从 i=25(Z) 到 i=0(A),确保盘符与位索引一致

同时在前端添加自动分配盘符后的重复检查:
- 检查获取的可用盘符是否为空
- 检查获取的盘符是否已被其他挂载占用
This commit is contained in:
VirtualHotBar
2026-06-02 02:22:20 +08:00
parent c0f34b053f
commit 801099e786

View File

@@ -44,9 +44,10 @@ pub fn find_first_available_drive_letter() -> Result<Option<String>, 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)));
}
}