【问题标题】:How to get the list of removable disk in c#?如何在 C# 中获取可移动磁盘的列表?
【发布时间】:2010-11-10 14:26:09
【问题描述】:

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

【问题讨论】:

    标签: c# .net removable-storage driveinfo


    【解决方案1】:

    此方法需要参考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
        }    
    }
    

    或者对于 LINQ 粉丝:

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



    已添加
    至于保存部分,据我所知,我认为您不能限制允许用户保存的位置以使用 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");
      }
    }
    

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

    希望对你有帮助

    【讨论】:

    • 您好 ThePower,我想向用户显示可用的可移动驱动器作为保存文件的对话框。请帮忙。
    • @karthik 我认为您必须制作自己的自定义保存对话框,它只会显示您从驱动器列表中获得的目录。您可以尝试将 saveFileDialog.InitialDirectory 设置为可移动驱动器之一,但用户仍然可以返回到硬盘驱动器等。如果您有时间创建自己的对话框,那么这是最好的选择,使用用于显示 RemovableDrives 及其内容的 TreeView,但这将比您预期的实现此解决方案更耗时。
    • linq 查询出错,应该是“可移除”而不是“可移除”
    【解决方案2】:

    怎么样:

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

    【讨论】:

    • 或同义词:var removedDrives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable);
    【解决方案3】:

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

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

    根据评论编辑:

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

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

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

    【讨论】:

    • 如果是 SD 而不是 USB 怎么办?或者这会迎合那个?
    • 像这里建议的那样使用 WMI 实际上是获取 USB 设备的一种比DriveInfo.GetDrives() 更可靠的方法,并且依赖于IsRemovable 属性:插入USB 端口的硬盘可能不会被识别为IsRemovable所以很容易错过。使用 WMI 需要更多的工作,但更健壮。
    • 如何获得驱动器号和名称?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2011-04-12
    • 2011-02-25
    • 2011-03-16
    相关资源
    最近更新 更多