C# 获取磁盘或硬盘信息的坑,存在未就绪(IsReady = false)导致异常的问题
最近测试组小伙伴在用外接扩展坞链接有线网络,发现好几个程序在获取磁盘信息的时候都直接报错。这让我很奇怪,拉取了现场的日志。

由于这个模块的代码已经很稳定,好久没修改过了,之前一直测试都没有问题的,然后查看windows 的盘符发现,只要插上扩展坞就会无缘无故多出来这种虚拟盘,无法点击,属性几乎是空的

在现场测试发现,只要拔掉扩展坞,异常的程序就能恢复正常了。
回去查看了一下代码,就是遍历所有盘符,获取是U盘,并且名称是UPGRADEDISK的U盘, 发现之前的代码片段如下:

该代码片段其实并没有判断某个盘是否已经准备就绪,详看:DriveInfo.IsReady 属性 (System.IO) | Microsoft Learn

如果在IsReady = false 的情况下,去获取磁盘的信息,可能就会出发Io异常了
下面是把触发了异常的代码段修改为正常的写法,增加了 优先 IsReady = true 的判断,再去获取磁盘的信息,测试没问题了

var driverInfos = DriveInfo.GetDrives().ToList().FindAll(x =>
x.IsReady && x.DriveType == DriveType.Removable &&
x.VolumeLabel.Equals("UPGRIDEDISK", StringComparison.OrdinalIgnoreCase));
总结:
1、如果用到DriveInfo.GetDrives() 去获取 磁盘的信息的时候,最保险的做法是:需要优先判断 IsReady 的属性,再去 获取磁盘信息
2、对于执行IO读写的操作,最好还是加上try-catch 进行捕获
C# 获取磁盘或硬盘信息的坑,存在未就绪(IsReady = false)导致异常的问题的更多相关文章
- C#获取磁盘列表与信息
方法1:使用Environment //获取当前计算机逻辑磁盘名称列表 String[] drives = Environment.GetLogicalDrives(); Console.WriteL ...
- Powershell获取磁盘信息
使用Powershell完成系统管理实在是太方便了,磁盘信息获取只需几行代码即可. 1: $DiskCount = ((Get-WmiObject -Class Win32_DiskDrive).Ca ...
- Java如何获取系统cpu、内存、硬盘信息
1 概述 前段时间摸索在Java中怎么获取系统信息包括cpu.内存.硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插 ...
- 主机性能监控之wmi 获取磁盘信息
标 题: 主机性能监控之wmi 获取磁盘信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅 ...
- 通过kfed自动获取磁盘信息的小脚本
通过kfed自动获取磁盘信息的小脚本 编译KFED [oracle@rac lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac lib]$ pwd /u01/app/ ...
- 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...
- C#-获取磁盘,cpu,内存信息
获取磁盘信息 zongdaxiao = GetHardDiskSpace("C") * 1.0 / 1024; user = GetHardDiskFreeSpace(" ...
- C#获取当前主机硬件信息
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#利用WMI获取 远程计算机硬盘数据
一.利用WMI获取 远程计算机硬盘数据,先引入"System.Management.dll"文件. /// <summary> /// 获取存储服务器硬盘 ...
- C/C++获取CPU等硬件信息&&屏幕截图
打算练习Socket的时候用用,最近有点小事情,没时间继续完善,先把写的这些代码贴上来,有空了再完善一下. HardwareInfo.h #include <stdio.h> #inclu ...
随机推荐
- Linux 环境变量指北
Linux 环境变量指北 一.终端:Login Shell 二.Systemd 的配置方式 三.图形界面 DM(Display Manager) 显示管理器 DE(Desktop Environmen ...
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...
- 【Python】读取写入INI文件
最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option.如果都用abaqus的getinput()和getinputs()函数,那输入的 ...
- wxformbuilder 如何生成python 代码
?问题 正常通过F8->F6 ,我执行这两步操作后如下图,以.fbp格式显示,没生成文件 解决方案 object properties 下勾选python 效果图:
- 如何基于大语言模型和MaxKB实现PPT自动生成方案
一.实现方案 利用讯飞大模型智能 PPT 生成接口实现,具体参见:讯飞开放平台智能PPT生成 https://www.xfyun.cn/services/aippt#anchor4503211 二.新 ...
- Linux下yum安装mysql 遇到的问题Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 错误
今天在linux下安装mysql时 执行service mysqld start时, mysql总是启动失败 后来查看mysql日志:/var/log/mysqld.log,发现有个Can't ope ...
- Web前端入门第 12 问:HTML 常用属性一览
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. HTML 常用属性大约 70 个,是否又头大了?脸上笑嘻嘻,心里嘛...嘿嘿... 温馨提示:属性不用死记硬背, ...
- [每日算法 - 华为机试] LeetCode1160. 拼写单词
题目入口 力扣https://leetcode.cn/problems/find-words-that-can-be-formed-by-characters/ 题目概述 给你一份『词汇表』(字符串数 ...
- JavaScript将时间戳转化为时间
const timestampToTime= (timestamp) => { const date = new Date(timestamp * 1000); const year = dat ...
- CDS是一个企业级的持续交付和DevOps自动化开源平台
CDS是一个企业级的持续交付和DevOps自动化开源平台 弹性 CDS资源/worker是按需启动的,以确保用户的等待时间较短,并且不会过度消耗空闲资源 可扩展的 在CDS中,任何类型的操作(Kube ...