回答
::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. 枚舉所有可能的字符
- 8. 有沒有辦法在Python中列出所有可用的驅動器號?
- 9. 是否可以動態枚舉VB .NET中的所有數組?
- 10. Resharper警告關於「可能的多枚舉」的枚舉的所有*用法
- 11. 枚舉我所有的Eclipse編輯器?
- 12. 在vC++中使用WMI枚舉分區驅動器盤符
- 13. 自動映射器枚舉枚舉類
- 14. 如何遍歷所有但可枚舉
- 15. 枚舉映射驅動器中的文件
- 16. 如何從Windows 7的驅動器號中獲取可移動設備的物理驅動器號?
- 17. 使用Python查找驅動器號(Windows)
- 18. 下一個可用的驅動器號後C:驅動器
- 19. 德爾福 - 枚舉的盤(S)和其他驅動器的Windows PC上
- 20. 枚舉Windows?
- 21. 如何枚舉X.org中所有可用的鍵盤佈局?
- 22. 枚舉Windows註冊表項中的所有子項和值
- 23. 是否可以使用`TDdeClientConv`類來枚舉所有可用的DDE服務器?
- 24. C#枚舉與數據驅動列表
- 25. 如何從所有枚舉類型中排除某些枚舉
- 26. 枚舉所有IEnumerable事件
- 27. 枚舉Mozilla中的所有屬性JSAPI
- 28. 枚舉Mathematica中的所有分區
- 29. 枚舉PHP中的所有複選框
- 30. 枚舉resx中的所有字符串
是的,這比GetLogicalDriveStrings更容易! – Alnitak 2008-11-13 08:53:17