回答
::GetLogicalDrives()将可用(读取:已使用)驱动器的列表作为掩码中的位返回。这应该包括映射的网络驱动器。因此,您可以简单地走位找到零位,这意味着不存在驱动器。如果有疑问,当驱动器可用时,您总是可以拨打::GetDriveType(),驱动器号为+ ":\"
(C代码为":\\"
,当然也可以使用支持Unicode的术语_T(":\\")
),如果驱动器可用,则返回DRIVE_UNKNOWN
或DRIVE_NO_ROOT_DIR
。
GetLogicalDriveStrings Function是一个很好的起点。
GetLogicalDriveStrings
只能获取当前使用的驱动器号的列表。
GetVolumeInformation
可用于获取有关特定驱动器的更多信息。
GetLogicalDrives和GetLogicalDriveStrings没有看到在不同命名空间中创建的网络驱动器。
例如,从在本地系统下运行的服务调用函数将看不到由已记录的用户创建的网络驱动器。
这是从Windows XP开始。下面的文章描述这种情况: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx
这是为什么?无论其他用户如何定义它们,您都可以重新使用驱动器号,并且问题只需要可用的未使用的字母。 – SilverbackNet 2014-04-21 23:27:20
我不是舒尔如何枚举他们或是否会编制有关的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++;
}
}
}
太多代码大声笑 – TheRealChx101 2013-10-17 08:47:44
- 1. 枚举内核驱动程序中的所有符号链接
- 2. 枚举外部驱动器
- 3. 枚举nodejs中的系统驱动器
- 4. 如何枚举硬盘驱动器
- 5. 在Node.JS中使用名称的枚举驱动器
- 6. 枚举Windows上所有可用视频编解码器的最佳方法?
- 7. 有没有办法在Python中列出所有可用的驱动器号?
- 8. 是否可以动态枚举VB .NET中的所有数组?
- 9. 枚举我所有的Eclipse编辑器?
- 10. 如何从Windows 7的驱动器号中获取可移动设备的物理驱动器号?
- 11. 使用Python查找驱动器号(Windows)
- 12. 下一个可用的驱动器号后C:驱动器
- 13. 德尔福 - 枚举的盘(S)和其他驱动器的Windows PC上
- 14. 如何枚举X.org中所有可用的键盘布局?
- 15. C#枚举与数据驱动列表
- 16. 枚举所有IEnumerable事件
- 17. 枚举PHP中的所有复选框
- 18. 枚举Mathematica中的所有分区
- 19. 枚举resx中的所有字符串
- 20. 如何枚举使用Windows API的所有安装的USB调制解调器
- 21. 获取枚举标志的所有枚举名称
- 22. 如何使用Delphi枚举所有可用的WiFi网络
- 23. 是否有可能在enum中枚举枚举?
- 24. 在Windows中枚举线程
- 25. Windows BAT如何替代驱动器号?
- 26. VMWare VMDK映射到Windows驱动器号
- 27. 尝试枚举J2SE所有可用的Wifi网络
- 28. 枚举所有可用的更改日记记录
- 29. 如何枚举所有可用的网络接口?
- 30. 如何枚举范围内的所有可用Wifi网络?
是的,这比GetLogicalDriveStrings更容易! – Alnitak 2008-11-13 08:53:17