Comment détecter un lecteur amovible en C#

Tout est dans le titre ou presque…
Je me demande s’il est possible en C# de détecter le type de support (lecteur cd, clef usb, APN) sur lequel un fichier est situé.
J’ai regardé du coté de la classe fileInfos, mais je n’ai rien trouvé…
Et sur ce coup, google n’a pas vraimant été mon ami (hou le vilain !).

Edit: reformulation plus claire de ma question
Ce message a été édité par aristidi le 25/07/2004

Il semblerais qu’il n’y ait rien de ce genre dans la lib .net 1.1 (et a premiere vue, rien non plus dans le 2.0), dans le namespace System.IO, tout du moins. Il va donc te falloir faire appel à l’API win32.

Tu as déja System.IO.Directory.GetLogicalDrives() pour récupérer la liste des lecteurs, ensuite, il te faudra utiliser la fonction :
UINT GetDriveType(
  LPCTSTR lpRootPathName
);
Tu dois pouvoir déclarer ca comme ca :
public enum DriveType
{
 DRIVE_UNKNOWN=0,
 DRIVE_NO_ROOT_DIR=1,
 DRIVE_REMOVABLE=2,
 DRIVE_FIXED=3,
 DRIVE_REMOTE=4,
 DRIVE_CDROM=5,
 DRIVE_RAMDISK=6
}
[System.Runtime.InteropServices.DllImport(“kernel32.dll”)]
public static extern DriveType GetDriveType (string lpRootPathName);

[/quote]

Ta solution fonctionne impecablement.
Merci beaucoup !

[quote] Il semblerais qu’il n’y ait rien de ce genre dans la lib .net 1.1 (et a premiere vue, rien non plus dans le 2.0), dans le namespace System.IO, tout du moins. Il va donc te falloir faire appel à l’API win32.
[/quote]
[/quote]Tssss, avec System.Management, on peut faire une variante sans faire de DllImport. V’là un code de test vite fait qui rajoute des ListViewItems pour chaque lecteur contenant un disque :

ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT  Size, DriveType, DeviceID, Description, VolumeName From Win32_LogicalDisk");

ManagementObjectCollection queryCollection = query.Get();

foreach (ManagementObject mo in queryCollection) {  if(mo[“Size”] != null) {
string drive = mo[“DeviceID”].ToString();
lviDrive = new MVListViewItem();
lviDrive.SubItems.Add(drive + " " + mo[“VolumeName”].ToString() + " [" + mo[“Description”].ToString() + “]”);
lviDrive.SubItems.Add(Directory.GetLastAccessTime(drive).ToShortDateString());
switch (Int32.Parse(mo[“DriveType”].ToString())) {
case 2 :
lviDrive.ImageIndex = 5;  // removable disk icon
break;
   case 3 :
lviDrive.ImageIndex = 6;  // hard drive icon
break;
 case 5 :
lviDrive.ImageIndex = 7;  // cd-rom icon
break;
 default :
lviDrive.ImageIndex = 8;  // default disk icon
break;
}
lviDrive.SelectedImageIndex = lviDrive.ImageIndex + 10;
lviDrive.HilightedImageIndex = lviDrive.ImageIndex + 20;
lviDrive.UseItemStyleForSubItems = true;
lvBrowse.Items.Add(lviDrive);

 }
}
[/quote]
Ce message a été édité par xentyr le 26/07/2004

Tiens, je ne connaissais pas du tout cet espace de nom…
Bon, étant donné que la solution de Tzim fonctionne très bien et que je suis un peu à la bourre, je retient sa solution…
Mais je garde ton infos sous le coude Xentyr…