1.在磁盤管理中可以看到黑色條框的磁盤未分配空間,說明windows支持這類資訊。
2.呼叫windowsAPI函式只能獲取磁盤總容量和各個磁區的容量,但無法準確知道是否存在未分配空間,未分配空間的具體大小是多少。
求大神,幫忙解答。
uj5u.com熱心網友回復:
不太懂,但是我覺得這個總量減去各個磁區量的和不就是未分配的空間大小嗎?uj5u.com熱心網友回復:
能夠分享下,是怎么呼叫windowsAPI函式獲取磁盤總容量(總共的 位元組數)及呼叫的是哪些API函式?正好碰到這個需求,先前并沒接觸過這塊知識。謝謝了uj5u.com熱心網友回復:
理論上是可以這樣的,但是各磁區容量都有幾兆的保留區。這樣算出來的容量只能是個大概,不準確。還有一個問題就是,這個想減得到的這個數字,你并不能確定是磁區保留的,還是未分配的。
uj5u.com熱心網友回復:
理論上是可以這樣的,但是各物理磁盤容量都有幾兆的保留區用于存盤各磁區資訊。這樣算出來的容量只能是個大概,不準確。 還有一個問題就是,這個想減得到的這個數字,你并不能確定是磁盤保留的,還是未分配的。
uj5u.com熱心網友回復:
GetDiskFreeSpaceExuj5u.com熱心網友回復:
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).
uj5u.com熱心網友回復:
獲取磁盤總容量可以用
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
uj5u.com熱心網友回復:
Good idea.現在最頭疼的是未分配空間出現在磁盤扇區最開始的位置。我可以過去第一個磁區的偏移量,但正常的磁盤第一個磁區也會有個幾兆的偏移量。所以就不好判斷這個是必然磁盤本身正常的偏移量還是未被分配的空間。我就想知道系統是怎么把這塊未分配挑出來的?有沒有提供什么API給我們?uj5u.com熱心網友回復:
不知道那些磁區軟體是怎么實作未分配空間的曬選的?求大神指教啊。
uj5u.com熱心網友回復:
我也有同樣的疑問,很多磁區軟體可以顯示未分配空間,我們暫時還沒有發現有效的方法,現有的API只能發現已經磁區的資訊
uj5u.com熱心網友回復:
感覺是驅動提供的介面,用戶程式不一定能直接使用,但是OS是沒問題的轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65491.html
標籤:硬件/系統
上一篇:vc2008 unicode環境 讀GB312網頁亂碼 utf-8轉正常中文顯示?
下一篇:滾輪事件ID
