【问题标题】:Creating Events for hard disk read and write为硬盘读写创建事件
【发布时间】:2011-03-01 23:44:13
【问题描述】:

我正在尝试编写一些可以在硬盘读取数据或写入数据时触发事件的东西。我知道这涉及使用 System.Diagnostics.PerformanceCounter,但我不太了解这一点,无法自己做到这一点。有人可以指出我正确的方向吗?另外,我希望触发事件以返回正在读取或写入的驱动器。任何帮助,将不胜感激。顺便说一下,这是 C#。

【问题讨论】:

  • 如果您真的想要为每个与磁盘相关的 R/W 设置一个事件,那么您将需要实现一个所谓的文件系统驱动程序——它不能在 .NET 中实现。如果你能更清楚地描述你的目标究竟是什么,也许还有另一种方法可以达到你的目标......
  • 我想做的是创建一种“磁盘灯”。位于托盘中的东西在硬盘驱动器中进行写入操作时闪烁红色,并在读取操作进行时闪烁绿色。
  • 这更像是一种方便的事情还是您的目标是安全(即监控任何磁盘活动)?
  • 一个方便的东西。我的一个朋友过去曾经在 DOS 上使用过某种 TSR,并且想要一些适用于 Windows 的东西,所以我告诉她我会看看我能做些什么。
  • 如果为了方便起见,已经有工具可以做到这一点 - 例如oo-software.com/en/products/oodriveled

标签: c# .net performancecounter


【解决方案1】:

以下内容不会创建事件,但您可以将其与计时器一起使用以在托盘中显示信息(根据 cmets):

using System.Diagnostics;

private PerformanceCounter diskRead = new PerformanceCounter();
private PerformanceCounter diskWrite = new PerformanceCounter();

diskRead.CategoryName = "PhysicalDisk";
diskRead.CounterName = "Disk Reads/sec";
diskRead.InstanceName = "_Total";

diskWrite.CategoryName = "PhysicalDisk";
diskWrite.CounterName = "Disk Writes/sec";
diskWrite.InstanceName = "_Total";

_Total 用于所有磁盘...获取可用磁盘的特定实例名称:

var cat = new System.Diagnostics.PerformanceCounterCategory("PhysicalDisk");
var instNames = cat.GetInstanceNames();

然后,您可以为您感兴趣的每个实例创建一对diskRead/diskWrite...有关如何将其与计时器结合使用的示例,请参阅this

【讨论】:

  • 这也会获得 CD 驱动器的读/写信息吗?我知道我没有具体说明,但我只是好奇
  • @icemanind 不确定(现在无法测试)...您可以通过调用PerformanceCounterCategory.GetCategories() 找到所有可用类别...您可以通过在每个实例上调用GetInstanceNames() 找到所有实例找到类别... HTH
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多