更新时间:2015-06-25 13:15:14浏览次数:1+次
下面直接给出获取磁盘各种信息的源代码:
//获取磁盘容量信息
void GetDiskVolInfo(CString panfu)//传入盘符
{
CString drive = _T("\\\\.\\")+panfu+_T(":");
HANDLE hFile = CreateFile(drive,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
NTFS_VOLUME_DATA_BUFFER ntfsVolData;
DWORD dwWritten = 0;
BOOL bDioControl = DeviceIoControl(hFile, FSCTL_GET_NTFS_VOLUME_DATA, NULL, 0, &ntfsVolData, sizeof(ntfsVolData), &dwWritten, NULL);
if (!bDioControl) {MessageBox(_T("文件打开错误!")); return TRUE;}
CString info_id,info_Vol,info_unit,info_mft;
info_id.Format(_T("卷序列号:%lX\n"),ntfsVolData.VolumeSerialNumber);
double AllVol = ((double)(ntfsVolData.TotalClusters.QuadPart))*(ntfsVolData.BytesPerCluster)/1024/1024/1024;
double FreeUseVol = ((double)(ntfsVolData.FreeClusters.QuadPart))*(ntfsVolData.BytesPerCluster)/1024/1024/1024;
double UsedVol = AllVol - FreeUseVol;
info_Vol.Format(_T("总容量:%.2fGB\n已用容量:%.2fGB\n可用容量:%.2fGB\n卷扇区数:%llu\n卷总簇数:%llu\n卷可用簇数:%llu\n卷总保留簇数:%llu\n"),AllVol,UsedVol,FreeUseVol,ntfsVolData.NumberSectors,ntfsVolData.TotalClusters,ntfsVolData.FreeClusters,ntfsVolData.TotalReserved);
info_unit.Format(_T("卷扇区字节数:%ld\n卷簇字节数:%ld\n文件记录段字节数:%ld\n文件记录段簇数:%ld\n"),ntfsVolData.BytesPerSector,ntfsVolData.BytesPerCluster,ntfsVolData.BytesPerFileRecordSegment,ntfsVolData.ClustersPerFileRecordSegment);
info_mft.Format(_T("主文件表长度:%llu\n主文件表的起始逻辑簇号:%llu\n主文件表镜像的起始逻辑簇号:%llu\n主文件表区起始逻辑簇号:%llu\n主文件表区终点簇号:%llu\n"),ntfsVolData.MftValidDataLength,ntfsVolData.MftStartLcn,ntfsVolData.Mft2StartLcn,ntfsVolData.MftZoneStart,ntfsVolData.MftZoneEnd);
CString str_Vol = info_id+info_Vol+info_unit+info_mft;
MessageBox(str_Vol);
}
相关资讯