vc 获取硬盘未指派的空间,若空间有多个需要,需要获取每个未被指派的空间的大小。怎样做

解决方案 »

  1.   

    VC 获取磁盘分区总空间和剩余空间
    在编程的时候,我们有时候要知道磁盘的剩余空间和总空间,例如:制作一个安装程序的时候,必须获取来提醒用户该磁盘分区能否容纳得下安装程序所有的文件。案例
    我已经封装好一个函数了,函数的第一个参数是分区的名称,如 "C:\\"  第二第三个参数分别是总空间和剩余空间,注意: 这两个参数是CString引用类型的。
    BOOL OnGetDiskInformaiton(const CString LogicalDreverName,CString &strTotalGB,CString &strFreeGB)
    {
           ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
           //获取信息
           if(GetDiskFreeSpaceEx(LogicalDreverName,&FreeAv,&TotalBytes,&FreeBytes))
           {
                  //转化为MB
                  long TotalMb=(long)(TotalBytes.QuadPart/1024/1024);
                  long LeaveMb=(long)(FreeBytes.QuadPart/1024/1024);
     
                  //转化为GB
                  double TotalGB=(double)TotalMb/1024;
                  double LeaveGB=(double)LeaveMb/1024;
     
                  //格式化字符串
                  strTotalGB.Format(TEXT("%lfGB"),TotalGB);
                  strFreeGB.Format(TEXT("%lfMB"),LeaveGB);
                  return TRUE;
           }
           else
           {
                  return FALSE;
           }
    }
     
      

  2.   

    该函数及控制码获取硬盘分区信息:
    BOOL DeviceIoControl( (HANDLE) hDevice,                // handle to a partition
                          IOCTL_DISK_GET_PARTITION_INFO,   // dwIoControlCode
                          (LPVOID) NULL,                   // lpInBuffer
                          (DWORD) 0,                       // nInBufferSize
                          (LPVOID) lpOutBuffer,            // output buffer
                          (DWORD) nOutBufferSize,          // size of output buffer
                          (LPDWORD) lpBytesReturned,       // number of bytes returned
                          (LPOVERLAPPED) lpOverlapped );   // OVERLAPPED structure
      

  3.   

    BOOL DeviceIoControl(
      (HANDLE) hDevice,            // handle to device
      IOCTL_DISK_GET_DRIVE_LAYOUT, // dwIoControlCode
      NULL,                        // lpInBuffer
      0,                           // nInBufferSize
      (LPVOID) lpOutBuffer,        // output buffer
      (DWORD) nOutBufferSize,      // size of output buffer
      (LPDWORD) lpBytesReturned,   // number of bytes returned
      (LPOVERLAPPED) lpOverlapped  // OVERLAPPED structure
    );这是获取整个磁盘所有分区的信息
      

  4.   

    这个问题还真的不是很好回答。 现成的sdk 肯定没有。估计需要分析磁盘格式啥啥的.....
    建议找一个工具,逆向分析建议看看BOOTICE