程序中我想获取硬盘分区信息,并获得相应的几个盘符,但是我在msdn里面查找GetSys开头的api函数,好像没有实现这个功能的,有没有大虾知道应该怎么实现?谢过了

解决方案 »

  1.   

    ////////////////////
    int nPos = 0;
        UINT nCount = 0;
        CString strDrive = "?:";
        DWORD dwDriveList = ::GetLogicalDrives ();
    CString cTmp;
        while (dwDriveList)
    {
            if (dwDriveList & 1) 
    {
                strDrive.SetAt (0, 0x41 + nPos);
    UINT nType = ::GetDriveType ((LPCTSTR) strDrive);
    switch (nType)
    {
    case DRIVE_REMOVABLE: cTmp="DRIVE_REMOVABLE";
    break;
    case DRIVE_FIXED: cTmp="DRIVE_FIXED";
    break;
    case DRIVE_REMOTE: cTmp="DRIVE_REMOTE";
    break;
    case DRIVE_CDROM:  cTmp="DRIVE_CDROM";
    break;
    case DRIVE_RAMDISK: cTmp="DRIVE_RAMDISK";
    break;
    default:  cTmp="UNKNOWN_DISK";
    break;
    }

    BOOL ret=GetDiskFreeSpaceEx(strDrive,&DiskSpaceInfo.FreeBytesAvaiable, \
    &DiskSpaceInfo.TotalBytes,  \
    &DiskSpaceInfo.FreeBytes);
    if(ret==TRUE)
    {
    l_FreeSpace=DiskSpaceInfo.FreeBytes.QuadPart/1048576;
    l_UsedSpace=(DiskSpaceInfo.TotalBytes.QuadPart-DiskSpaceInfo.FreeBytes.QuadPart)/1048576;
    l_TotalSpace=DiskSpaceInfo.TotalBytes.QuadPart/1048576;
    }
    else
    {
    l_FreeSpace=l_UsedSpace=l_TotalSpace=0;
    }
    sprintf(logbuff,"%s  %s Free Space %dMB,Used  Space %dMB,Total Space %dMB\n",strDrive, cTmp, \
    (DWORD)l_FreeSpace, \
    (DWORD)l_UsedSpace, \
    (DWORD)l_TotalSpace);
    fprintf(pLog,logbuff);    

    nCount++;
            }
            dwDriveList >>= 1;
            nPos++;
        }