Bueno, este código funciona también con lectores de tarjetas de memoria integradas (generalmente en portátiles), y en general cualquier unidad de disco extraible al montarse (Incluidos los CD's y DVD's).
Aunque esta nueva comunicación es para pegar un trocito de código que resuelve una de las cuestiones abiertas anteriormente: cómo detectar la LETRA de la unidad recién detectada:
char LetraUnidad(int unitmask)
{
char[] units ={ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
int i = 0;
System.Collections.BitArray ba = new System.Collections.BitArray(System.BitConverter.GetBytes(unitmask));
foreach (bool var in ba)
{
if (var == true)
break;
i++;
}
return units[i];
}
Básicamente convierte la máscara de bits (no manejada) en un array de bits, lo recorre, y luego devuelve la letra indexada en el array de unidades válidas. En C/C++ habría usado directamente el índice para convertirlo de 'short' a 'char', pero C# y su protección de tipos no me deja hacerlo directamente.
Bueno, a disfrutar de la detección de unidades de disco extraíbles!! Y a darle buen uso (como copia automatizada de las fotos de la tarjeta de la cámara a una carpeta en "mis imágenes", por ejemplo).
Espero que se le de un uso responsable a este conocimiento :)
Un saludo !
PD: he compilado todo esto en un único post, para los perezosos del copiar y pegar. Está en mi blog.
Fullbyte Alchemist