如何在c#中获取可移动磁盘列表?

Anu*_*uya 18 .net c# removable-drive driveinfo

我想在c#中获取可移动磁盘列表.我想跳过本地驱动器.因为我希望用户只将文件保存在可移动磁盘中.

Llo*_*ell 36

您需要参考System.IO此方法.

var driveList = DriveInfo.GetDrives();

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

或者对于LINQ粉丝:

var driveList = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);
Run Code Online (Sandbox Code Playgroud)



添加
至于保存部分,据我所知,我不认为您可以限制用户可以保存到使用SaveFileDialog的位置,但您可以在显示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");
  }
}
Run Code Online (Sandbox Code Playgroud)

要么

最好的选择是创建自己的保存对话框,其中包含树视图,仅显示可移动驱动器及其内容供用户保存!我会推荐这个选项.

希望这可以帮助


Mat*_*ton 10

怎么样:

var removableDrives = from d in System.IO.DriveInfo.GetDrives()
                      where d.DriveType == DriveType.Removable;
Run Code Online (Sandbox Code Playgroud)

  • 或同义词:var removableDrives = DriveInfo.GetDrives().其中​​(d => d.DriveType == DriveType.Removable); (3认同)

S M*_*ran 5

您还可以使用 WMI 获取可移动驱动器列表。

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

根据评论编辑:

获得驱动器列表后,获取 GUID 并将它们添加到 SaveFileDialogInstance.CustomPlaces 集合。

下面的代码需要一些调整...

System.Windows.Forms.SaveFileDialog dls = new System.Windows.Forms.SaveFileDialog();
dls.CustomPlaces.Clear();
dls.CustomPlaces.Add(AddGuidOfTheExternalDriveOneByOne);
....
....
dls.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

  • 像这里建议的那样使用 WMI 实际上是一种比 DriveInfo.GetDrives() 更可靠的获取 USB 设备的方法,并且依赖于 IsRemovable 属性:插入 USB 端口的硬盘驱动器可能无法识别为 IsRemovable,因此很容易错过。使用 WMI 需要做更多的工作,但更健壮。 (2认同)