5

我想用逻辑驱动器列表填充组合框,但我想排除任何映射驱动器。下面的代码给了我一个没有任何过滤的所有逻辑驱动器的列表。

comboBox.Items.AddRange(Environment.GetLogicalDrives());

是否有可用的方法可以帮助您确定物理驱动器和映射驱动器之间的关系?

4

7 回答 7

5

您可以使用DriveInfo

    DriveInfo[] allDrives = DriveInfo.GetDrives();
    foreach (DriveInfo d in allDrives)
    {
        Console.WriteLine("Drive {0}", d.Name);
        Console.WriteLine("  File type: {0}", d.DriveType);
        if(d.DriveType != DriveType.Network)
        {
            comboBox.Items.Add(d.Name);
        }
    }

DriveType当属性是时排除驱动器Network

于 2013-01-31T16:58:20.757 回答
2

使用DriveInfo.GetDrives获取驱动器列表。然后,您可以按其DriveType属性过滤列表。

于 2013-01-31T16:57:19.823 回答
2

你可以 DriveTypeDriveInfo类中使用属​​性

 DriveInfo[] dis = DriveInfo.GetDrives();
 foreach ( DriveInfo di in dis )
 {
     if ( di.DriveType == DriveType.Network )
     {
        //network drive
     }
  }
于 2013-01-31T16:58:06.537 回答
0

想到的第一件事是映射的驱动器将具有以开头的字符串\\

此处详细介绍了另一种更广泛但更可靠的方法:如何以编程方式发现系统上映射的网络驱动器及其服务器名称?


或者尝试调用DriveInfo.GetDrives()which 将为您提供具有更多元数据的对象,这些元数据将帮助您之后进行过滤。这是一个例子:

http://www.daniweb.com/software-development/csharp/threads/159290/getting-mapped-drives-list

于 2013-01-31T16:55:58.420 回答
0

这对我有用:

DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
    if (d.IsReady && (d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Removable))
    {
        cboSrcDrive.Items.Add(d.Name);
        cboTgtDrive.Items.Add(d.Name);
    }

}
于 2013-01-31T20:08:42.787 回答
0

我在这个主题上找到的最完整的信息(在 Internet 上进行了长时间搜索后)可在 Code Project 上找到:Get a list of physical disks and the partitions in VB.NET the easy way

(这是一个 VB 项目。)

于 2013-01-31T19:39:14.770 回答
0

尝试使用System.IO.DriveInfo.GetDrives

comboBox.Items.AddRange(
       System.IO.DriveInfo.GetDrives()
                          .Where(di=>di.DriveType != DriveType.Network)
                          .Select(di=>di.Name));
于 2013-01-31T16:59:51.610 回答