当前位置:C++技术网 > 资讯 > 如何获取磁盘各种信息,有码有真相!

如何获取磁盘各种信息,有码有真相!

更新时间: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);
}

    函数中直接输出所有信息,如果只需要部分,可以截取。传入的盘符直接是"C","D"等即可。