C++,MFC 读取磁盘(U盘,SD卡)信息,容量,可用容量,卷标等等
各位大神,我老板让我写一个工具抓取SD卡和U盘信息的,但是盘符不够,目前微软的盘符只有A到Z,我通过盘符去抓,只能抓到一部分,客户要求同时抓取40个U盘的信息,但是我是根据盘符去读取的,盘符不够导致其他盘读不出来!
if( RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\MountedDevices", &HKey) == ERROR_SUCCESS )//打开注册表项 SYSTEM\\MountedDevices
{
ValueName[12] = 'A'; // \\DosDevices\A
i = 0;
AvailableDrive = GetLogicalDrives();//返回Long型,每一位表示磁盘A到Z是否存在32位
while(AvailableDrive)
{
strcpy(DriveDescription[i], "");
if(AvailableDrive % 2)
{
DataType = REG_BINARY;
DataSize = MAX_PATH << 1; //乘2
if( RegQueryValueEx(HKey, ValueName, NULL, &DataType, ValueString, &DataSize) == ERROR_SUCCESS )
{
for(j = 0; j < DataSize; j += 2)
{
if(ValueString[j] == '#')
{
DriveDescription[i][j >> 1] = '\\';
}
else
{
DriveDescription[i][j >> 1] = ValueString[j];//得到 “R>”,代表是系统盘
}
}
DriveDescription[i][DataSize >> 1] = '\0';
strlwr(DriveDescription[i]);//转成小写,保存了磁盘的信息
}
} // end if(AvailableDrive % 2)
ValueName[12]++;
i++;
AvailableDrive >>= 1;
} // end while(AvailableDrive)
RegCloseKey(HKey);
}
用了下面的函数去抓移动磁盘信息,但是都要求先获取磁盘的盘符,超过Z的磁盘根本没盘符,能不能有方法通过磁盘的句柄直接读取到磁盘信息呢!
strDriveLetter.Format("%s:\\",m_pDeviceInfo->m_strDriveLetter);
m_nFileCount = 0;
m_nDirectoryCount = 0;
m_ulDriverSize = 0;
GetInternaDocuments(strDriveLetter);
strDriverSize = AdjustCapcityPattern(m_ulDriverSize);
(m_pDeviceInfo->m_strInternaDocuments).Format("%d/%d/%s",m_nFileCount, m_nDirectoryCount, strDriverSize);
GetVolumeInformation(strDriveLetter, VolumeLabelbuf, MAX_PATH, &ulSerialNum, 0, 0, FileSystembuf, MAX_PATH);
m_pDeviceInfo->m_strVolumeLabel = VolumeLabelbuf;
m_pDeviceInfo->m_strFileSystem = FileSystembuf;
ULARGE_INTEGER lFreeBytesAvailable; // bytes available to caller
ULARGE_INTEGER lTotalNumberOfBytes; // bytes on disk
ULARGE_INTEGER lTotalNumberOfFreeBytes; // free bytes on disk
CString strCurDevicePath;
strCurDevicePath.Format("%s:\\",m_pDeviceInfo->m_strDriveLetter);
BOOL blRet = GetDiskFreeSpaceEx(strCurDevicePath, &lFreeBytesAvailable, <otalNumberOfBytes, <otalNumberOfFreeBytes);
if( blRet && lTotalNumberOfBytes.QuadPart )
{
m_pDeviceInfo->m_strTotalCapacity = AdjustCapcityPattern(lTotalNumberOfBytes.QuadPart);
m_pDeviceInfo->m_strUsedCapacity = AdjustCapcityPattern(lTotalNumberOfBytes.QuadPart - lTotalNumberOfFreeBytes.QuadPart);
}