Dim Fs As Scripting.FileSystemObject = New Scripting.FileSystemObject()
Dim MyDrive As Scripting.Drive
  MyDrive = Fs.GetDrive(Directory.GetDirectoryRoot("c:\tmp"))
  用MyDrive.DriveLetter取得驱动器盘符

解决方案 »

  1.   

    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
      

  2.   

    遍历Drivers
    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
      

  3.   

    再问
    用System.IO.Directory.GetLogicalDrives())取得了驱动器盘符,
    如何区别是软驱,光驱什么的
      

  4.   

    不是说了吗?WMI或秋水无痕说的利用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判断是是否DRIVE_CDROM,就可以了
      

  5.   

    最简单的方法:
    string[] Drives =Environment.GetLogicalDrives()
    foreach(string Drive in Drives)
    {
      //遍历所有驱动盘
    }
      

  6.   

    再请教
    我取得了驱动盘符后,接着通过directoryinfo的GetDirectories取它下面的
    文件夹,但是有些盘是读不了的,比如a:,或者有些系统目录读取就会报错,我现在是在exception中用递归的方法解决的,总觉得不太好,不知哪位有更好的解决方法此问之后将马上结贴,大家谅解:)
      

  7.   

    我不是说了吗?WMI
    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(秋水无恨)说的也可以
      

  8.   

    可能我没说清楚
    我的意思是说读取系统目录时,有的目录是系统不让读取的,这样我的程序会引起错误,比如我用DirectoryInfo 的GetDirectories取系统盘里System Volume Information目录下的目录信息时,系统不让读取,我只能用捕获异常的方法解决,这样的情况一多,导致运行较慢,不知如何解决.