Je veux obtenir la liste des disques amovibles en c#. Je veux sauter les commandes locales. Parce que je veux que l'utilisateur enregistre le fichier uniquement sur un disque amovible.

19
Anuya 14 juil. 2009 à 13:56

3 réponses

Meilleure réponse

Vous devrez référencer System.IO pour cette méthode.

var driveList = DriveInfo.GetDrives();

foreach (DriveInfo drive in driveList)
{
    if (drive .DriveType == DriveType.Removable)
    {
    //Add to RemovableDrive list or whatever activity you want
    }    
}

Ou pour les fans de LINQ :

var driveList = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);



Ajouté
En ce qui concerne la partie Saving, pour autant que je sache, je ne pense pas que vous puissiez restreindre l'endroit où l'utilisateur est autorisé à enregistrer à l'aide d'un SaveFileDialog, mais vous pouvez effectuer une vérification après avoir affiché le SaveFileDialog.

if(saveFileDialog.ShowDialog() == DialogResult.OK)
{
  if (CheckFilePathIsOfRemovableDisk(saveFileDialog.FileName) == true)
  {
  //carry on with save
  }
  else
  {
  MessageBox.Show("Must save to Removable Disk, location was not valid");
  }
}

OU

La meilleure option serait de créer votre propre boîte de dialogue d'enregistrement, qui contient une arborescence, n'affichant que les lecteurs amovibles et leur contenu pour que l'utilisateur puisse l'enregistrer ! Je recommanderais cette option.

J'espère que cela t'aides

38
Shadrack B. Orina 16 oct. 2016 à 13:57
Bonjour ThePower, je souhaite afficher les lecteurs amovibles disponibles à l'utilisateur sous forme de boîte de dialogue pour enregistrer un fichier. S'il vous plaît aider.
 – 
Anuya
14 juil. 2009 à 14:19
1
Je pense que vous devrez créer votre propre boîte de dialogue de sauvegarde personnalisée, qui n'affichera que les répertoires que vous avez obtenus dans la liste des lecteurs. Vous pouvez essayer de définir saveFileDialog.InitialDirectory comme l'un des lecteurs amovibles, mais l'utilisateur pourra toujours revenir au disque dur, etc. Si vous avez le temps de créer votre propre boîte de dialogue, c'est la meilleure option, en utilisant un TreeView pour afficher les RemovableDrives et leur contenu, mais cela prendra plus de temps que prévu pour obtenir cette solution.
 – 
Lloyd Powell
14 juil. 2009 à 14:26
Il y a une erreur dans la requête linq, elle devrait être "Amovible" au lieu de "Amovible"
 – 
Lonefish
22 août 2016 à 17:43

Que diriez-vous:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
10
Matt Hamilton 14 juil. 2009 à 13:59
3
Ou le synonyme : var amovibleDrives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);
 – 
Rhys Jones
14 juil. 2009 à 14:06

Vous pouvez également utiliser WMI pour obtenir la liste des lecteurs amovibles.

ManagementObjectCollection drives = new ManagementObjectSearcher (
     "SELECT Caption, DeviceID FROM Win32_DiskDrive WHERE InterfaceType='USB'"
).Get();

Modifié en fonction du commentaire :

Une fois que vous avez obtenu la liste des lecteurs, accédez aux GUID et ajoutez-les à la collection SaveFileDialogInstance.CustomPlaces.

Le code ci-dessous a besoin de quelques ajustements...

System.Windows.Forms.SaveFileDialog dls = new System.Windows.Forms.SaveFileDialog();
dls.CustomPlaces.Clear();
dls.CustomPlaces.Add(AddGuidOfTheExternalDriveOneByOne);
....
....
dls.ShowDialog();
5
S M Kamran 14 juil. 2009 à 14:46
Et si c'était en SD plutôt qu'en USB ? Ou cela répondra-t-il à cela?
 – 
Lloyd Powell
14 juil. 2009 à 14:10
2
L'utilisation de WMI comme suggéré ici est en fait un moyen plus solide d'obtenir des périphériques USB que DriveInfo.GetDrives() et en s'appuyant sur la propriété IsRemovable : les disques durs branchés sur le port USB peuvent ne pas être identifiés comme IsRemovable donc le sont faciles à manquer. L'utilisation de WMI nécessite un peu plus de travail mais est plus robuste.
 – 
Renaud Bompuis
22 avril 2019 à 11:37
Comment obtenez-vous la lettre et le nom du lecteur ?
 – 
newbieguy
27 déc. 2019 à 16:20