2011-03-01 34 views
5

我正在嘗試寫入一些內容,以便在硬盤讀取數據或寫入數據時隨時觸發事件。我知道這涉及到使用System.Diagnostics.PerformanceCounter,但我不知道這足以讓我自己做到這一點。有人能指引我朝着正確的方向嗎?另外,我希望發生的事件返回正在讀取或寫入的驅動器。任何幫助,將不勝感激。順便說一下,這是C#。爲硬盤讀取和寫入創建事件

+0

如果你真的想爲每個與磁盤相關的R/W發生一個事件,那麼你將需要實現一個所謂的文件系統驅動程序 - 它不能在.NET中實現。如果你可以更清楚地描述你的目標是什麼,也許還有另一種方法來獲得你想要的結果... – Yahia 2012-03-19 21:42:25

+0

我想要做的是創建一種「磁盤光」。當硬盤驅動器正在進行寫入操作時,托盤中的某些物品會閃爍紅光,並且每當進行讀取操作時閃爍綠色。 – Icemanind 2012-03-19 21:50:38

+0

這是更方便的一種事情還是你瞄準安全(即監控任何磁盤活動)? – Yahia 2012-03-19 22:01:18

回答

8

下不會產生事件,但你可以用計時器一起使用的托盤中顯示的信息(按評論):

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是所有磁盤的......要得到具體可用磁盤instancenames使用:

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

您可以創建爲每個實例你有興趣一對diskRead/diskWrite在...關於如何結合定時器使用此示例見this

+0

這是否會獲得CD驅動器的讀/寫信息?我知道我沒有指定它,但我只是好奇 – Icemanind 2012-03-19 22:49:55

+1

@icemanind不知道(現在不能測試)...你可以通過調用'PerformanceCounterCategory.GetCategories()'來找到所有可用的類別...您可以通過在每個找到的Category ... HTH上調用'GetInstanceNames()'來查找所有實例 – Yahia 2012-03-20 05:33:31