2011-03-01 14 views
5

Estoy intentando escribir algo que activará un evento cada vez que el disco duro lea datos o escriba datos. Sé que esto implica el uso de System.Diagnostics.PerformanceCounter, pero no lo sé lo suficientemente bien como para poder hacer esto por mi cuenta. ¿Alguien me puede apuntar en la dirección correcta? Además, me gustaría que el evento que dispara devuelva qué unidad se está leyendo o escribiendo. Cualquier ayuda sería apreciada. Esto es C#, por cierto.Crear eventos para el disco duro leer y escribir

+0

SI realmente desea un evento para TODOS los R/W relacionados con el disco ENTONCES tendrá que implementar un denominado controlador del sistema de archivos, que no se puede implementar en .NET. Si pudieras describir más claramente cuál es tu objetivo, tal vez exista otro enfoque para obtener los resultados que buscas ... – Yahia

+0

Lo que intento hacer es crear una especie de "Luz de disco". Algo que se encuentra en la bandeja que parpadea en rojo cada vez que se lleva a cabo una operación de escritura en el disco duro y parpadea en verde cada vez que se realiza una operación de lectura. – Icemanind

+0

¿Es esto más bien un tipo de conveniencia O está apuntando a la seguridad (es decir, monitoreando cualquier actividad de disco)? – Yahia

Respuesta

8

los siguientes no crear eventos, pero se puede utilizar junto con un temporizador para mostrar información en la bandeja (según los comentarios):

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 es para todos los discos ... para obtener la específica instancenames de discos disponibles utilizan:

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

a continuación, puede crear un par de diskRead/diskWrite para cada instancia le interesa ... para la muestra de cómo usar esto en combinación con un temporizador ver this.

+0

¿Esto también le dará información de lectura/escritura para unidades de CD? Sé que no lo especifiqué, pero tengo curiosidad – Icemanind

+1

@icemanind no estoy seguro (no lo puedo probar ahora) ... puedes encontrar todas las categorías disponibles llamando a 'PerformanceCounterCategory.GetCategories() '... puede encontrar todas las instancias llamando a 'GetInstanceNames()' en cada Categoría encontrada ... HTH – Yahia

Cuestiones relacionadas