1.在磁盘管理中可以看到黑色条框的磁盘未分配空间,说明windows支持这类信息。
2.调用windowsAPI函数只能获取磁盘总容量和各个分区的容量,但无法准确知道是否存在未分配空间,未分配空间的具体大小是多少。
求大神,帮忙解答。

解决方案 »

  1.   

    能够分享下,是怎么调用windowsAPI函数获取磁盘总容量(总共的 字节数)及调用的是哪些API函数?正好碰到这个需求,先前并没接触过这块知识。谢谢了
      

  2.   

    GetDiskFreeSpaceEx
      

  3.   

    lz可以用这个试试,
    DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,NULL,0,&layOutInfo,sizeof(DRIVE_LAYOUT_INFORMATION_EX)*20,&bytesReturned,NULL)
    根据layOutInfo里面每个分区的偏移地址layOutInfo[0].PartitionEntry[i].StartingOffset和分区长度layOutInfo[0].PartitionEntry[i].PartitionLength估算两个分区间未分配的空间大小。
    如果两者之间没有未分配的空间的话,layOutInfo[0].PartitionEntry[i].StartingOffset+layOutInfo[0].PartitionEntry[i].PartitionLength=layOutInfo[0].PartitionEntry[i+1].StartingOffset。
    如果存在未分配的空间的话,那么未分配空间的大小为:size=layOutInfo[0].PartitionEntry[i+1].StartingOffset-(layOutInfo[0].PartitionEntry[i].StartingOffset+layOutInfo[0].PartitionEntry[i].PartitionLength).
      

  4.   

    获取磁盘总容量可以用 
    DISK_GEOMETRY_EX geoStruct;
     memset(&geoStruct,0,sizeof(geoStruct));
    DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX ,NULL,0,&geoStruct,sizeof(geoStruct),&bytesReturned,NULL)
    网址http://www.cppblog.com/dingding/archive/2008/09/23/62570.html
      

  5.   

    Good idea.现在最头疼的是未分配空间出现在磁盘扇区最开始的位置。我可以过去第一个分区的偏移量,但正常的磁盘第一个分区也会有个几兆的偏移量。所以就不好判断这个是必然磁盘本身正常的偏移量还是未被分配的空间。我就想知道系统是怎么把这块未分配挑出来的?有没有提供什么API给我们?
      

  6.   

    我也有同样的疑问,很多分区软件可以显示未分配空间,我们暂时还没有发现有效的方法,现有的API只能发现已经分区的信息