2008-11-13 56 views

回答

13

::GetLogicalDrives()将可用(读取:已使用)驱动器的列表作为掩码中的位返回。这应该包括映射的网络驱动器。因此,您可以简单地走位找到零位,这意味着不存在驱动器。如果有疑问,当驱动器可用时,您总是可以拨打::GetDriveType(),驱动器号为+ ":\"(C代码为":\\",当然也可以使用支持Unicode的术语_T(":\\")),如果驱动器可用,则返回DRIVE_UNKNOWNDRIVE_NO_ROOT_DIR

+0

是的,这比GetLogicalDriveStrings更容易! – Alnitak 2008-11-13 08:53:17

1

GetLogicalDrives和GetLogicalDriveStrings没有看到在不同命名空间中创建的网络驱动器。

例如,从在本地系统下运行的服务调用函数将看不到由已记录的用户创建的网络驱动器。

这是从Windows XP开始。下面的文章描述这种情况: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx

+0

这是为什么?无论其他用户如何定义它们,您都可以重新使用驱动器号,并且问题只需要可用的未使用的字母。 – SilverbackNet 2014-04-21 23:27:20

3

我不是舒尔如何枚举他们或是否会编制有关的Visual C++,但我斯特姆编码本上开发的C++或代码块检查什么驱动是acessible使用的CreateFile和使用GetDriveType的驱动器是什么类型。程序检查驱动器从A到Z:

#include <windows.h> 
#include <cstring> 
#include <sstream> 
#include <iostream> 

using namespace std; 

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nShowCmd) 
{ 
    HANDLE hDevice = NULL; 
    HANDLE fileFind = NULL; 
    while(true) 
    { 
     Sleep(3005); 
     char drv='A'; 
     while(drv!='[') 
     { 
      Sleep(105); 
      const char *charDrvCF; 
      const char *charDrv; 
      stringstream Str; 
      string drvStr; 
      Str<<drv; 
      Str>>drvStr; 
      string drvSpc=drvStr+":\\"; 
      string fCheck="\\\\.\\"; 
      string fhCheck=fCheck+drvStr+":"; 
      charDrvCF=fhCheck.c_str(); 
      charDrv=drvSpc.c_str();  
      hDevice=CreateFile(charDrvCF, 
           GENERIC_READ|GENERIC_WRITE, 
           FILE_SHARE_READ|FILE_SHARE_WRITE, 
           NULL, 
           OPEN_EXISTING, 
           0, 
           NULL); 
      if(hDevice!=INVALID_HANDLE_VALUE) 
      { 
       switch(GetDriveType(charDrv)) 
       { 
        case DRIVE_FIXED: 
        { 
         cout<<"Fixed drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOVABLE: 
        { 
         cout<<"Removable drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_NO_ROOT_DIR: 
        { 
         cout<<"There is no volume mounted at the specified path. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOTE: 
        { 
         cout<<"The drive is a remote (network) drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_CDROM: 
        { 
         cout<<"The drive is a CD-ROM drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_RAMDISK: 
        { 
         cout<<"The drive is a RAM disk. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_UNKNOWN: 
        { 
         cout<<"The drive type cannot be determined. "<<charDrv<<endl; 
         break; 
        } 
       } 
      } 
     drv++; 
     } 
    } 
} 
+0

太多代码大声笑 – TheRealChx101 2013-10-17 08:47:44