C++,MFC 读取磁盘(U盘,SD卡)信息,容量,可用容量,卷标等等

LXW295716355 2015-11-13 05:01:52
各位大神,我老板让我写一个工具抓取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);
}
...全文
1502 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LXW295716355 2015-11-16
  • 打赏
  • 举报
回复
还有人有办法吗,我只需要读取到每个USB设备的信息,例如容量,占容...
笨笨仔 2015-11-13
  • 打赏
  • 举报
回复
你这设计思路貌似本身就有问题,超过盘符数量的设备应该无法获得盘符,因此根本不可行,请使用“设备序列号”

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧