You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#获取多硬盘信息仅返回C盘数据的技术求助

问题分析与修复方案:多硬盘HDD信息仅提取第一个驱动器的问题

嘿,我一眼就定位到问题了——你的CurrentDiskUsage()方法在遍历驱动器时,找到第一个就绪的驱动器后直接执行了return,这会立刻终止整个方法,后面的驱动器完全没机会被处理!另外catch块里的return也有问题,一旦某个驱动器抛出异常,方法直接返回"Fail",剩下的驱动器也不会被检查。

具体问题点拆解

  • 在foreach (DriveInfo drive in drives)循环中,只要找到第一个drive.IsReady为true的驱动器(通常就是C盘),就执行return driveInformation;,方法直接结束,后续循环迭代被跳过。
  • catch块里的return "Fail";会在单个驱动器出错时直接终止方法,导致其他正常驱动器的信息也无法获取。

修复后的代码方案

我们需要把所有符合条件的驱动器信息拼接起来,最后统一返回,而不是中途终止方法。同时用StringBuilder来优化字符串拼接的性能:

using System.Text; // 需要引入这个命名空间来使用StringBuilder

public static string CurrentDiskUsage() { 
    DriveInfo[] drives = DriveInfo.GetDrives(); 
    StringBuilder driveInformation = new StringBuilder();
    
    foreach (DriveInfo drive in drives) { 
        try { 
            if (drive.IsReady) { 
                double result = 100 * (double) drive.TotalFreeSpace / drive.TotalSize; 
                result = Math.Round(result, 2, MidpointRounding.AwayFromZero); 
                
                // 逐个追加每个驱动器的信息
                driveInformation.AppendLine(drive.Name);
                driveInformation.AppendLine(drive.DriveFormat);
                driveInformation.AppendLine($"Drive total size: {FormatBytes(drive.TotalSize)}");
                driveInformation.AppendLine($"Drive total free space: {FormatBytes(drive.TotalFreeSpace)}");
                driveInformation.AppendLine($"Free space as percentage: {result}%");
                driveInformation.AppendLine(); // 用空行分隔不同驱动器,提升可读性
            } 
        } catch (Exception e) { 
            // 记录异常但不终止方法,继续处理其他驱动器
            Console.WriteLine($"获取驱动器{drive.Name}信息失败: {e.Message}");
            driveInformation.AppendLine($"⚠️ 驱动器{drive.Name}信息获取失败: {e.Message}");
            driveInformation.AppendLine();
        } 
    }
    
    // 如果没有任何有效信息,返回"Fail",否则返回拼接好的所有驱动器数据
    return driveInformation.Length == 0 ? "Fail" : driveInformation.ToString();
}

关键修改说明

  1. 替换字符串拼接方式:用StringBuilder代替直接的string +=,避免频繁创建字符串对象,提升性能(尤其是在多驱动器场景下)。
  2. 移除中途return:不再在循环内返回结果,而是把每个驱动器的信息都追加到结果容器中,遍历完所有驱动器后统一返回。
  3. 优化异常处理:单个驱动器出错时,仅记录异常并继续处理剩余驱动器,不会因为一个盘的问题导致整个方法失败。
  4. 空结果判断:最后检查是否有有效信息,避免返回空字符串,保持原有的"Fail"逻辑。

另外提个小细节:你的控制台输出代码里,Content数组长度是7,但循环条件是i < 6,会漏掉Content[6]的输出,如果这不是故意的,可以调整循环条件为i < Content.Length来遍历所有元素。

内容的提问来源于stack exchange,提问作者xjacksssss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:42