How to get the list of removable disk in c#?
Asked Answered
G

3

22

I want to get the list of removable disk in c#. I want to skip the local drives. Because i want the user to save the file only in removable disk.

Geibel answered 14/7, 2009 at 9:56 Comment(0)
B
42

You will need to reference System.IO for this method.

var driveList = DriveInfo.GetDrives();

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

Or for the LINQ fans:

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



Added
As for the Saving part, as far as I know I don't think you can restrict where the user is allowed to save to using a SaveFileDialog, but you could complete a check after you have shown the 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");
  }
}

OR

The best option would be to create your own Save Dialog, which contains a tree view, only showing the removable drives and their contents for the user to save to! I would recommend this option.

Hope this helps

Blent answered 14/7, 2009 at 10:0 Comment(3)
Hi ThePower, I want to show the available removable drives to the user as a dialog box to save a file. Please help.Geibel
@karthik I think you will have to make your own customised Save Dialog, which will only show the directories you got from the List of Drives. You could try setting the saveFileDialog.InitialDirectory to be one of the removable drives, but the user will still be able to return to the hard drive etc. If you have the time to create your own dialog, then that is the best option, using a TreeView to show the RemovableDrives and their contents, but this will be more time consuming than you are expecting to achieve this solution.Blent
There's an error in the linq query, it should be "Removable" instead of "Removeable"Infusion
T
11

How about:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
Telegraph answered 14/7, 2009 at 9:59 Comment(1)
Or the synonymous: var removableDrives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);Natashianatassia
I
5

You can also use WMI to get the list of removable drives.

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

Edited based on comment:

After you get the list of drives get there GUID's and add them to SaveFileDialogInstance.CustomPlaces collection.

The code below need some tweaking...

System.Windows.Forms.SaveFileDialog dls = new System.Windows.Forms.SaveFileDialog();
dls.CustomPlaces.Clear();
dls.CustomPlaces.Add(AddGuidOfTheExternalDriveOneByOne);
....
....
dls.ShowDialog();
Iniquitous answered 14/7, 2009 at 10:4 Comment(3)
What if it's SD rather than USB? Or will this cater for that?Blent
Using WMI like suggested here is actyually a more solid way to get USB devices than DriveInfo.GetDrives() and relying on the IsRemovable property: harddrives plugged into the USB port may not be identified as IsRemovable so the are easy to miss. Using WMI requires a bit more work but is more robust.Danny
how do you get the drive letter and name?Ers

© 2022 - 2024 — McMap. All rights reserved.