leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 2010
-
6 juin 2006 à 13:32
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 2008
-
9 juin 2006 à 13:29
salut a tous.
en rapport avec l'appli postée il y a qqs jours (le client FTP), il y a a lheure actuelle 2 bugs que je n'arrive pas a résoudre. le principal étant que lorsque je veux connaitre le type d'un périphérique par DriveInfo.DriveType, un lecteur USB et un floppy sont tous deux détéctés comme DriveType.Removable....bref, impossible de différencier (et donc faire afficher des icones différentes) selon le type de périph.....y'a t il un moyen de savoir si le lecteur est USB (appareil photo numérique, clé usb, ou que sais je encore) ou un floppy? jusque la jai vraiment pas trouvé :(
PS : le deuxieme bug est que lorsque je veux renommer un fichier, jappelle BeginEdit sur l'item de ma listview, et dans l'event AfterEdit je rejette la modif si un fichier au meme nom existe déjà...et si la modif est rejetée, la souris se met en mode cadre de séléction (comme si le bouton gauche etait enfoncé et que je voulais séléctionner un groupe d'items)...pareil, si qqun a une idée de pourquoi ce phénomène se présente, et comment le résoudre je suis preneur ;)
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 7 juin 2006 à 14:34
Salut,
Effectivement, DriveType répond "Removable" pour les deux.
Une solution pas super propre pourrait être de regarder la propriété
TotalSize. Entre un floppy et un lecteur USB, la différence est notable
(1.44Mo contre plusieurs dizaines ou centaines de Mo)
Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 7 juin 2006 à 16:06
Concernant la différence USB / Floppy :
J'ai déjà été confronté à ce genre de problème, mais dans mon cas j'utilisais un ManagementObjectSearcher pour lister les "drives", ce qui me renvoyait une liste de ManagementObject... Lesquels possédaient une propriété "DriveType" (du même type que celle que possède DriveInfo), mais aussi une propriété 'MediaType" (ayant des valeurs du genre : FloppyDisk, OtherRemovableMedia, etc).
D'après ce que j'ai vu, DriveInfo ne possède pas la propriété MediaType... mais il y a peut être un moyen d'y accéder autrement... En espérant que ça aide...
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 01:28
@nikoui : comment puis je construire un objet du type que tu décris et lexploiter? je peux utiliser cet objet pour linstancier avec la lettre d'un lecteur directement? (je construirais ds ce cas ce type dobjet a chaque fois que jai un lecteur de type "Removable").
@econs : si aucune disquette n'est présente dans mon lecteur, est ce que je ne vais pas trouver 0 pour TotalSize? et si je tombe un jour sur un périphérique de totalsize à 0, je le prendrais pour un lecteur disquette...(lecteur usb non formaté, ou au type de formatage non reconnu, ca donnerais pas 0 aussi par hasard?).
bref, ca me semble pas super fiable (mais cest une solution à envisager ^^)
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 8 juin 2006 à 10:23
leprov, voila comment je m'en sert :
// On récupère la liste des lecteurs connus
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk ");
ManagementObjectCollection driveCollection = query.Get();
foreach (ManagementObject driveObject in driveCollection)
{
// Nom de lecteur
string driveFullName = driveObject["Name"].ToString();
// Type de lecteur
int driveypeId = int.Parse(driveObject["DriveType"].ToString());
// Type de média
int mediaTypeId = int.Parse(driveObject["MediaType"].ToString());
}
avec :
switch (driveypeId)
{
case 1:
//NoRootDirectory
break;
case 2:
//RemovableDisk
break;
case 3:
//LocalDisk
break;
case 4:
//NetworkDrive
break;
case 5:
//CompactDisc
break;
case 6:
//RAMDisk
break;
}
et :
switch (mediaTypeId)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
//FloppyDisk, chaque valeur ci dessus pour une taille différente de disquette
break;
case 11:
//OtherRemovableMedia
break;
case 12:
//FixedHardDisk
break;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 13:07
ok je crois juste que je vais changer mon code de détéction des disques pour utiliser ca....
par contre la requête sort d'où? ca tape dans une BD? définie ou et comment? où est ce que je pourrais consulter la liste des requêtes possibles avec cet objet?
en tous cas merci bcp ;)
je teste ca des ce soir et je valide la réponse si ca marche.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 13:14
sinon je pense a autre chose pour pas forcément reprendre tout mon code, je peux pas faire un truc du genre
if (MyDrive.DriveType == DriveType.Removable)
{
ManagementObjectSearcher query =
new ManagementObjectSearcher(
"select MediaTypeId from Win32_LogicalDisk where Name == " + MyDrive.Name);
int mediaTypeId = int.Parse(driveObject["MediaType"].ToString());
if (mediaTypeId == 11)
{
//lecteur usb
}
else if (mediaTypeId <= 22 && mediaTypeId != 12)
{
//floppy
}
dans ce cas est ce que ma requête est juste? si non que dois-je écrire? ca me semble mieux de n'utiliser cet objet que dans le cas ou jai un DriveType.Removable. ca mevite de changer tout monde code et jai juste un traitement a ajouter pour faire la différence (dans le cas ou je fais tout comme toi je dois reprendre toute ma portion de code......un peu casse pieds lol)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 18:36
y a t il une manip spécifique a faire pour utiliser les objets de management? selon msdn, il suffit d'utiliser System.Management. Hors, cet espace de nom n'a pas l'air dexister chez moi.....
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 18:45
quel idiot jai répondu a ma question tout seul...il manquait juste la référence à la dll ....
désolé pour cette question un poil stupide (vu l'évidence de la réponse....)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 8 juin 2006 à 19:24
Verdict : ma requête de fonctionnait pas...
sinon par ce biais j'arrive effectivement à faire la différence entre usb et lecteur disquette. par contre a chaque appel ca fait grésiller le lecteur (ce qui est légèrement stressant sachant que l'appel est potentiellement récurrent...)
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 9 juin 2006 à 13:29
>> a chaque appel ca fait grésiller le lecteur
Oui, je rencontre le même problème (scan de tous les lecteurs, avec le petit temps d'attente sur les lecteurs de disquette...). Je n'ai pas encore trouvé de solution pour éviter ça, si tu trouves je suis preneur ^^