我想用逻辑驱动器列表填充组合框,但我想排除任何映射驱动器。下面的代码给了我一个没有任何过滤的所有逻辑驱动器的列表。
comboBox.Items.AddRange(Environment.GetLogicalDrives());
是否有可用的方法可以帮助您确定物理驱动器和映射驱动器之间的关系?
我想用逻辑驱动器列表填充组合框,但我想排除任何映射驱动器。下面的代码给了我一个没有任何过滤的所有逻辑驱动器的列表。
comboBox.Items.AddRange(Environment.GetLogicalDrives());
是否有可用的方法可以帮助您确定物理驱动器和映射驱动器之间的关系?
您可以使用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
使用DriveInfo.GetDrives获取驱动器列表。然后,您可以按其DriveType属性过滤列表。
你可以 DriveType
在DriveInfo
类中使用属性
DriveInfo[] dis = DriveInfo.GetDrives();
foreach ( DriveInfo di in dis )
{
if ( di.DriveType == DriveType.Network )
{
//network drive
}
}
想到的第一件事是映射的驱动器将具有以开头的字符串\\
此处详细介绍了另一种更广泛但更可靠的方法:如何以编程方式发现系统上映射的网络驱动器及其服务器名称?
或者尝试调用DriveInfo.GetDrives()
which 将为您提供具有更多元数据的对象,这些元数据将帮助您之后进行过滤。这是一个例子:
http://www.daniweb.com/software-development/csharp/threads/159290/getting-mapped-drives-list
这对我有用:
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);
}
}
我在这个主题上找到的最完整的信息(在 Internet 上进行了长时间搜索后)可在 Code Project 上找到:Get a list of physical disks and the partitions in VB.NET the easy way
(这是一个 VB 项目。)
尝试使用System.IO.DriveInfo.GetDrives
:
comboBox.Items.AddRange(
System.IO.DriveInfo.GetDrives()
.Where(di=>di.DriveType != DriveType.Network)
.Select(di=>di.Name));