LuckyScooby
LuckyScooby

Reputation: 91

Detect if hard disk is being accessed or not

I am trying to make a very simple hard disk access monitor to work like those embedded LEDs that blink according to drive usage. That LED REALLY helps me, but the laptop I am using does not have it. =[

So, I've made a simple tray icon application, but I don't know how to determine that variable of disk access.

I've searched for it and found something like System.Diagnostics.PerformanceCounter, but I have no idea on using it for my task.

If there is another solution, I'd also appreciate! =] Thanks.

Oh! I almost forgot, it needs to detect ANY and EVERY access to the hard drive.. I've tested an application out there (with the exact same supposed function), but after some tests I could easily realize it was missing some accesses, mainly when you executed a new program.

Upvotes: 4

Views: 2311

Answers (1)

Rick S
Rick S

Reputation: 6586

I've found a hard disk activity monitor sample application written in VB.NET. It's fairly simple so you should have no problem converting it to c#.

The idea is to use two Performance Counters, "Disk Read Bytes/sec" and "Disk Write Bytes/sec" for "LogicalDisk"

 ReadCounter = New PerformanceCounter("LogicalDisk", "Disk Read Bytes/sec", "_Total") 
 WriteCounter = New PerformanceCounter("LogicalDisk", "Disk Write Bytes/sec", "_Total") 

And then in your main loop (which needs to be threaded) you call NextValue to determine if there is disk activity.

R = ReadCounter.NextValue 
W = WriteCounter.NextValue 

The full source code is here on Microsoft's site.

Upvotes: 4

Related Questions