Dim Fs As Scripting.FileSystemObject = New Scripting.FileSystemObject()
Dim MyDrive As Scripting.Drive
MyDrive = Fs.GetDrive(Directory.GetDirectoryRoot("c:\tmp"))
用MyDrive.DriveLetter取得驱动器盘符
Dim MyDrive As Scripting.Drive
MyDrive = Fs.GetDrive(Directory.GetDirectoryRoot("c:\tmp"))
用MyDrive.DriveLetter取得驱动器盘符
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk ");
ManagementObjectCollection queryCollection = query.Get(); //loop throught each object to get drive information
foreach ( ManagementObject mo in queryCollection)
{
switch (int.Parse( mo["DriveType"].ToString()))
{
case Removable: //removable drives
imageIndex = 5;
selectIndex = 5;
break;
case LocalDisk: //Local drives
imageIndex = 6;
selectIndex = 6;
break;
case CD: //CD rom drives
imageIndex = 7;
selectIndex = 7;
break;
case Network: //Network drives
imageIndex = 8;
selectIndex = 8;
break;
default: //defalut to folder
imageIndex = 2;
selectIndex = 3;
break;
}
//get drive name
Console.WriteLine("Drive: " + mo["Name"].ToString());
}
具体事例参考:http://www.codeproject.com/useritems/WMI.asp
foreach(string d in System.IO.Directory.GetLogicalDrives()){利用API
[DllImport("kernel32")]
public static extern int GetDriveType(string Path);0 DRIVE_UNKNOWN,
1 DRIVE_NO_ROOT_DIR,
2 DRIVE_REMOVABLE,
3 DRIVE_FIXED,
4 DRIVE_REMOTE,
5 DRIVE_CDROM,
6 DRIVE_RAMDISK或者FSO
用System.IO.Directory.GetLogicalDrives())取得了驱动器盘符,
如何区别是软驱,光驱什么的
[DllImport("kernel32")]
public static extern int GetDriveType(string Path);0 DRIVE_UNKNOWN,
1 DRIVE_NO_ROOT_DIR,
2 DRIVE_REMOVABLE,
3 DRIVE_FIXED,
4 DRIVE_REMOTE,
5 DRIVE_CDROM,
6 DRIVE_RAMDISK判断是是否DRIVE_CDROM,就可以了
string[] Drives =Environment.GetLogicalDrives()
foreach(string Drive in Drives)
{
//遍历所有驱动盘
}
我取得了驱动盘符后,接着通过directoryinfo的GetDirectories取它下面的
文件夹,但是有些盘是读不了的,比如a:,或者有些系统目录读取就会报错,我现在是在exception中用递归的方法解决的,总觉得不太好,不知哪位有更好的解决方法此问之后将马上结贴,大家谅解:)
wim
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk ");
ManagementObjectCollection queryCollection = query.Get(); //loop throught each object to get drive information
foreach ( ManagementObject mo in queryCollection)
{
switch (int.Parse( mo["DriveType"].ToString()))
{
case Removable: //removable drives
imageIndex = 5;
selectIndex = 5;
break;
case LocalDisk: //Local drives
imageIndex = 6;
selectIndex = 6;
break;
case CD: //CD rom drives
imageIndex = 7;
selectIndex = 7;
break;
case Network: //Network drives
imageIndex = 8;
selectIndex = 8;
break;
default: //defalut to folder
imageIndex = 2;
selectIndex = 3;
break;
}
//get drive name
Console.WriteLine("Drive: " + mo["Name"].ToString());
}
具体事例参考:http://www.codeproject.com/useritems/WMI.asp还有qiushuiwuhen(秋水无恨)说的也可以
我的意思是说读取系统目录时,有的目录是系统不让读取的,这样我的程序会引起错误,比如我用DirectoryInfo 的GetDirectories取系统盘里System Volume Information目录下的目录信息时,系统不让读取,我只能用捕获异常的方法解决,这样的情况一多,导致运行较慢,不知如何解决.