2009-07-14 12 views

risposta

30

Sarà necessario fare riferimento a System.IO per questo metodo.

var driveList = DriveInfo.GetDrives(); 

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

O per i tifosi LINQ:

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



Aggiunto
quanto riguarda la parte di risparmio, per quanto ne so non credo che è possibile limitare in cui l'utente può salvare l'utilizzo di un parametro SaveFileDialog, ma è possibile completare un controllo dopo aver visualizzato 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"); 
    } 
} 

O

L'opzione migliore sarebbe quella di creare il proprio finestra di dialogo Salva, che contiene una vista ad albero, che mostra solo le unità rimovibili e il loro contenuto per l'utente di salvare! Consiglierei questa opzione.

Spero che questo aiuti

+0

Hi ThePower, Desidero mostrare all'utente le unità rimovibili disponibili come una finestra di dialogo per salvare un file. Per favore aiuto. – Anuya

+1

@karthik Penso che dovrai creare la tua finestra di dialogo di salvataggio personalizzata, che mostrerà solo le directory che hai ottenuto dall'elenco delle unità.Potresti provare a impostare saveFileDialog.InitialDirectory come una delle unità rimovibili, ma l'utente sarà comunque in grado di tornare al disco rigido, ecc. Se hai il tempo di creare la tua finestra di dialogo, questa è l'opzione migliore , usando un TreeView per mostrare i RemovableDrive e il loro contenuto, ma questo richiederà più tempo di quanto ci si aspetti per ottenere questa soluzione. – ThePower

+0

C'è un errore nella query linq, dovrebbe essere "Rimovibile" invece di "Rimovibile" – Lonefish

4
+0

H Rhys, Sono nuovo di iLists. Come eseguire il codice nel link che hai dato, in ordine per mostrare all'utente la finestra di dialogo con le unità rimovibili? Per favore aiuto. Urgente. – Anuya

+0

Il codice di esempio su quel collegamento restituisce semplicemente un elenco delle unità rimovibili. Per usarlo in una finestra di dialogo, probabilmente dovrai creare una finestra di dialogo personalizzata come suggerito da @ThePower. –

+0

Il link in questo post è morto. Cosa dovremmo fare con la risposta? Tutta la risposta è, è un collegamento a una risorsa che oggi (25-10-17) non esiste più. – Jura25

9

ne dite:

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

O anche:var removableDrives = DriveInfo.GetDrives(). Where (d => d.DriveType == DriveType.Removable); –

3

È inoltre possibile utilizzare WMI per ottenere l'elenco delle unità rimovibili.

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

cura sulla base di commento:

Dopo aver ottenuto l'elenco delle unità arrivarci GUID e aggiungerli alla raccolta SaveFileDialogInstance.CustomPlaces.

Il seguente codice ha bisogno di qualche ritocco ...

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

Cosa succede se è SD piuttosto che USB? O sarà adatto a questo? – ThePower

Problemi correlati