| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Определение размера диска |
| Автор: Riply 5.6.2007, 05:44 |
| Здравствуйте ! Допустим, мы берем диск ( например CD ) и тремя способами пробуем получить его "размер". DeviceIoControl(..., IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, ...., PDISK_GEOMETRY_EX,..... Size_Ex := PDISK_GEOMETRY_EX.DiskSize.QuadPart; // первый вариант with PDISK_GEOMETRY_EX.Geometry do Size_Calc := Cylinders.QuadPart * TracksPerCylinder * SectorsPerTrack * BytesPerSector; // второй вариант и GetDiskFreeSpaceEx(PChar('\\.\CdRom0\), ..., Size_Total, ...) // третий вариант Сравниваем результаты: Size_Calc = 725 614 592 Size_Total = 728 975 360 Size_Ex = 729 282 560 Объясните мне, пожалуйста, почему они различаются и что каждый из них под собой подразумевает ? Почему отличается результат, полученный GetDiskFreeSpaceEx, еще, худо-бедно, предположить можно (служебная информация и все такое), но почему различаются Size_Ex и Size_Calc, мне совсем непонятно :( P.S. CD-диск взят как пример. Для дискеты: Size_Calc = 1 474 560 Size_Total = 1 457 664 Size_Ex = получить не удается из-за EX-кода. Для флешки: Size_Calc = 123 379 200 Size_Total = 124 559 360 Size_Ex = 125 829 120 |
| Автор: Rennigth 7.6.2007, 17:09 | ||
| Riply, Ну ты бы могла хоть структурки с константами описать... :( Ну это так, лирика, очень уж лениво было. А так по сути топа, накатал примерчик:
1й и 3й вариант у меня одинаковы. Почему отличается 2й будем думать... p.s. уже завтра. Добавлено через 6 минут и 4 секунды PSS: Пример не совсем удачный, непинайте если что |
| Автор: Rouse_ 7.6.2007, 23:40 |
| IOCTL_DISK_GET_DRIVE_GEOMETRY_EX для флопиков не перекрыт в драйвере. Ну а остальное очень хорошо описано в DDK в том-же месте откуда взяты сами константы DeviceIoControl запросов. |