-
смотрю код получения инфы с винта: http://citforum.ru/programming/delphi/disk_editor/выполняю: hFile := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(No)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hFile = INVALID_HANDLE_VALUE then begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
end;
result:= DeviceIoControl(hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0, @Geometry, SizeOf(TDiskGeometry), bytesreturned, nil)
and (bytesreturned = SizeOf(TDiskGeometry)); заполняю структуру Geometry = TDiskGeometry = packed record Cylinders: TLargeInteger; MediaType: DWORD; TracksPerCylinder: DWORD; SectorsPerTrack: DWORD; BytesPerSector: DWORD; end; проверяю полученные данные: memo1.Lines.Add('TotalBytes: '+ IntToStr(
drive.Geometry.Cylinders * drive.Geometry.TracksPerCylinder *
drive.Geometry.SectorsPerTrack * drive.Geometry.BytesPerSector
) );
и получаю БОЛЬЩЕ свободного места (по сравнению с виндой)! это как так может быть?
-
Windows.GetDiskFreeSpaceEx('h:', FreeBytesAvailableToCaller, TotalNumberOfBytes, @TotalNumberOfFreeBytes); работает корректно
-
керк, ау)
-
а каким образом геометрия относится к свободному месту ?
-
ой, не свободного места, а общий объем диска!
-
БОЛЬЩЕ насколько? Значительно или в пределах погрешности измерений? Что значит "по сравнению с виндой", где в винде смотришь? Выглядит так, быдто в винде ты смотришь размер тома, а программа выдаёт размер диска (и [1] тому порукой).
-
> в пределах погрешности измерений
о каких погрешностях речь?
-
Drive: 0 MediaType: FixedMedia Cylinders: 30 401 TracksPerCylinder: 255 SectorsPerTrack: 63 BytesPerSector: 512 TotalBytes: 250 056 737 280 TotalBytes (GetDiskFreeSpaceEx): 53 875 548 160
Drive: 2 MediaType: RemovableMedia Cylinders: 976 TracksPerCylinder: 255 SectorsPerTrack: 63 BytesPerSector: 512 TotalBytes: 8 027 873 280 TotalBytes (GetDiskFreeSpaceEx): 8 027 762 688
-
> быдто в винде ты смотришь размер тома
смотрю емкость...
-
memo1.Lines.Add('TotalBytes: '+ Format('%.0n',
[drive.Geometry.Cylinders * drive.Geometry.TracksPerCylinder *
drive.Geometry.SectorsPerTrack * drive.Geometry.BytesPerSector *1.0])
);
-
> brother © (11.02.13 08:57) [8] ёмкость чего и где смотришь? я не из буквоедства спрашиваю.
Ты же разницу между h: и \\.\PhysicalDriveN осознаёшь?
-
> ёмкость чего и где смотришь?
в винде свойсва диска-общие: емкость
> Ты же разницу между h: и \\.\PhysicalDriveN осознаёшь?
конечно, вот именно, что работаю с \\.\PhysicalDriveN следовательно должен увидеть ВСЕ
-
> в винде свойсва диска-общие: емкость Так это ёмкость не диска, а тома.
> конечно, вот именно, что работаю с \\.\PhysicalDriveN следовательно > должен увидеть ВСЕ Ну так он и увидел всё (и получаю БОЛЬЩЕ свободного места (по сравнению с виндой)!)
Тома выравниваются по границе цилиндров, после МБР идёт 31 (кажется) пустой сектор. Кроме того, GetDiskFreeSpaceEx(), по идее, должен возвращать размеры без учёта структур файловой системы — так чего же удивляться, что "размер диска в винде" меньше, чем цилиндры*головки*секторы*512?
-
а теперь осознал, что сравниваю разные объемы, спс...
-
одни - логические, другие - физические...
-
именно. удач. :-)
|