首页 > 编程语言 >C# 获取磁盘或硬盘信息的坑,存在未就绪(IsReady = false)导致异常的问题

C# 获取磁盘或硬盘信息的坑,存在未就绪(IsReady = false)导致异常的问题

时间:2024-09-14 09:25:26浏览次数:13  
标签:IsReady false C# 信息 获取 DriveInfo 磁盘

最近测试组小伙伴在用外接扩展坞链接有线网络,发现好几个程序在获取磁盘信息的时候都直接报错。这让我很奇怪,拉取了现场的日志。

 

由于这个模块的代码已经很稳定,好久没修改过了,之前一直测试都没有问题的,然后查看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 进行捕获

标签:IsReady,false,C#,信息,获取,DriveInfo,磁盘
From: https://www.cnblogs.com/wuty/p/18413323

相关文章

  • 新手编程竞赛入门指南 [Cloned]
    欢迎加入编程竞赛协会(QQ群:)进入协会QQ群,联系纳新管理员xixu、ssmy,需提交信息(学院、班级、姓名、学号,vjudge帐号),通过审核后邀请加入“程序设计竞赛组”开展编程学习做题训练。受人数限制,一段时间不参与活动者会被移除。新手编程竞赛入门指南编程是程序设计的简称。计算机通过各种......
  • Taobao API interface: Taobao product details data interface
    InterfaceOverviewCommoninterface:taobao.item_get,usedtoobtainproductdetailsdata.Returninformation:Youcanobtainalotofinformationabouttheproduct,suchasproductname,price,sales,evaluation,storeinformation,etc.Specificallyincl......
  • 2、.Net 前端框架:ASP.Net Core - .Net宣传系列文章
    ASP.NETCore是一个跨平台、高性能、开源的框架,用于构建现代化的、基于云的、互联网连接的应用程序。它是微软对原始ASP.NET框架的重构和扩展,提供了更多的灵活性和改进的性能。ASP.NETCore可以用于开发Web应用程序、WebAPI、以及服务端渲染的Web页面。ASP.NETC......
  • vue3/provider 和 inject实现跨组件动态数据传递。
    实现跨层传递在Vue中,provider和inject是一种用于实现依赖注入的高级特性,允许一个祖先组件向其所有子孙组件注入一个依赖,而不论组件层次有多深,并在起上下游关系成立的时间里始终生效。这在某些场景下非常有用,比如当你需要跨多个组件层级传递数据时。定义provide对象:在父组......
  • Taobao API interface: Get Taobao product details data based on product ID
    TaobaoproductdetailsdataAPIinterfaceisasetofinterfacesprovidedbyTaobaoOpenPlatformforobtainingdetailedinformationofTaobaoproducts.Throughtheseinterfaces,developerscanintegrateTaobaoproductdataintheirownapplicationsorsy......
  • vue3API /watch
    1.watch侦听在Vue3中,watch是一个用于观察和响应Vue实例上的数据变动的函数。它可以用来观察几乎所有类型的数据,包括ref、reactive、响应式对象的属性,甚至是计算属性。当被观察的数据变化时,watch会触发一个回调函数。<scriptsetup>import{ref,watch}from'vue......
  • CentOs 入门必备基础知识
    CentOS(CommunityENTerpriseOperatingSystem)是一个基于RedHatEnterpriseLinux(RHEL)源代码构建的自由Linux发行版。作为一个稳定、可靠、开源的操作系统平台,CentOS广泛应用于Web服务器、数据库服务器、应用服务器等多种场景。以下是CentOS入门的必备基础知识,旨在帮助初学者......
  • PbootCMS网站常见错误提示总结
    安装PbootCMS时遇到的各种错误是很常见的,尤其是对于新手来说。下面是一些常见的错误及其解决方法,希望能帮助到遇到这些问题的朋友。1.Parseerror:syntaxerror,unexpected':',expecting'{'inwww\core\function\handle.phponline130问题描述:语法错误,提示在 www\co......
  • PbootCMS性能优化研究之提升网页访问速度
    服务器配置、CMS程序本身以及所使用的数据库都会显著影响网站的响应速度。下面是针对这三个方面的一些建议:1.服务器配置高配置服务器的影响:高配置服务器通常意味着更好的CPU、更多的RAM和更快的I/O存储,这些都能显著提升服务器处理请求的能力。对于数据量不是特别大的......
  • .NET 9 优化,抢先体验 C# 13 新特性
    合集-.NET基础知识(3) 1..NET9优化,抢先体验C#13新特性08-202.《黑神话:悟空》神话再现,虚幻引擎与Unity/C#谁更强?08-213..NET6.0+WPF使用Prism框架实现导航09-11收起 阅读目录前言新特性总结下载地址参考链接最后前言微软即将在2024年1......