2009-07-14 7 views

Répondre

30

Vous aurez besoin de faire référence 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 LINQ:

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



Ajouté
En ce qui concerne la partie économie, pour autant que je sais que je ne pense pas que vous pouvez restreindre l' l'utilisateur est autorisé à enregistrer à l'aide d'un SaveFileDialog, mais vous pouvez effectuer une vérification après avoir affiché 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 Enregistrer, qui contient une vue arborescente, ne montrant que les lecteurs amovibles et leur contenu pour l'utilisateur d'enregistrer à! Je recommanderais cette option.

Hope this helps

+0

Salut ThePower, Je veux montrer les lecteurs amovibles disponibles à l'utilisateur comme une boîte de dialogue pour enregistrer un fichier. S'il vous plaît aider. – Anuya

+1

@karthik Je pense que vous devrez créer votre propre dialogue de sauvegarde personnalisé, qui montrera seulement les répertoires que vous avez obtenus à partir de la liste des lecteurs.Vous pouvez essayer de définir saveFileDialog.InitialDirectory comme l'un des lecteurs amovibles, mais l'utilisateur pourra toujours revenir sur le disque dur, etc. Si vous avez le temps de créer votre propre boîte de dialogue, alors c'est la meilleure option , en utilisant un TreeView pour montrer les RemovableDrives et leur contenu, mais cela prendra plus de temps que vous attendez pour réaliser cette solution. – ThePower

+0

Il y a une erreur dans la requête linq, elle devrait être "Removable" au lieu de "Removeable" – Lonefish

4
+0

H Rhys, Je suis nouveau à iLists. Comment exécuter le code dans le lien que vous avez donné, afin d'afficher le dialogue avec les lecteurs amovibles à l'utilisateur? S'il vous plaît aider. Urgent. – Anuya

+0

L'exemple de code de ce lien renvoie simplement une liste des lecteurs amovibles. Pour l'utiliser dans une boîte de dialogue, vous devrez probablement créer une boîte de dialogue personnalisée comme suggéré par @ThePower. –

+0

Le lien dans ce post est mort. Que devrions-nous faire avec la réponse? Toute la réponse est, est un lien vers une ressource qui aujourd'hui (25-10-17) n'existe plus. – Jura25

9

Que diriez-vous:

var removableDrives = from d in System.IO.DriveInfo.GetDrives() 
         where d.DriveType == DriveType.Removable; 
+2

Ou le même: var removableDrives = DriveInfo.GetDrives(). Où (d => d.DriveType == DriveType.Removable); –

3

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é basé sur le commentaire:

Une fois que vous obtenez la liste des lecteurs il y a de GUID et les ajouter à la collection obtenir des SaveFileDialogInstance.CustomPlaces.

Le code ci-dessous ont besoin ... quelques ajustements

System.Windows.Forms.SaveFileDialog dls = new System.Windows.Forms.SaveFileDialog(); 
dls.CustomPlaces.Clear(); 
dls.CustomPlaces.Add(AddGuidOfTheExternalDriveOneByOne); 
.... 
.... 
dls.ShowDialog(); 
+0

Et si c'était SD plutôt que USB? Ou cela va-t-il répondre à cela? – ThePower

Questions connexes