for (Drive = 'A';Drive<='Z';Drive++)
{
String d;
d=IntToStr(Drive)+":\\"; switch GetDriveType(d.c_str())
{
case DRIVE_REMOVABLE :
Listbox1->Items->Add(Drive + " Removable");
case DRIVE_FIXED :
Listbox1->Items->Add(Drive + " Fixed");
case DRIVE_REMOTE :
Listbox1->Items->Add(Drive + " Network drive");
case DRIVE_CDROM :
Listbox1->Items->Add(Drive + " CD-ROM");
case DRIVE_RAMDISK :
Listbox1->Items->Add(Drive + " RAM Disk");
}
}上面是一段伪代码,我对VC不熟,对C++ BUILDER熟悉一点。所以用BCB的语法。当然,关键是GetDriveType这个API。
{
String d;
d=IntToStr(Drive)+":\\"; switch GetDriveType(d.c_str())
{
case DRIVE_REMOVABLE :
Listbox1->Items->Add(Drive + " Removable");
case DRIVE_FIXED :
Listbox1->Items->Add(Drive + " Fixed");
case DRIVE_REMOTE :
Listbox1->Items->Add(Drive + " Network drive");
case DRIVE_CDROM :
Listbox1->Items->Add(Drive + " CD-ROM");
case DRIVE_RAMDISK :
Listbox1->Items->Add(Drive + " RAM Disk");
}
}上面是一段伪代码,我对VC不熟,对C++ BUILDER熟悉一点。所以用BCB的语法。当然,关键是GetDriveType这个API。
UINT nNumDrives=0;
do
{
if ( dwLogDrives%10 && nNumDrives!=1)
{
_stprintf(lpszDriveString,_T("%c:\\"),(TCHAR)(_T('A')+nNumDrives));
m_LocalCombox.AddString (lpszDriveString);
}
dwLogDrives>>=1;
nNumDrives++;
} while ( dwLogDrives !=0 );
LPCTR lpDrvString=new char[dwRet];
GetLogicalDriveString(dwRet,lpDrvString);结果是lpDrvString="A:\\\nC:\\\0D:\\\0\0";(假设只有A,C,D盘)
结果是lpDrvString="A:\\\0C:\\\0D:\\\0\0";(假设只有A,C,D盘)
void GetAllLogicalDriveString(CStringArray& strArray)
{
DWORD dwNum = GetLogicalDriveStrings(0, NULL) * sizeof(TCHAR);
HANDLE hHeap = GetProcessHeap();
LPTSTR pszAllDrives = (LPTSTR)HeapAlloc(hHeap,
HEAP_ZERO_MEMORY, dwNum);
GetLogicalDriveStrings(dwNum / sizeof(TCHAR), pszAllDrives); strArray.RemoveAll();
LPTSTR pszDrive = pszAllDrives;
while(pszDrive[0] != 0)
{
strArray.Add(pszDrive);
pszDrive = _tcschr(pszDrive, 0) + 1;
} HeapFree(hHeap, 0, pszAllDrives);
}