как узнать размер кластера fat системы

Тема в разделе "Другие", создана пользователем dag, 24 мар 2005.

Статус темы:
Закрыта.
  1. dag

    dag Гость

    Есть простецкое задание, надо сосчитать размер потеряного дискового пространства которое находится в последнем (полностью не заполненном) кластере файла...

    сделать просто - рекурсией шарим по диску находя все файлы, делим размер файла на размер кластера, полученное значение округляем всегда в большую сторону, умножаем на размер кластера и вычитаем размер файла, добавляем к общей переменной результата........

    в общем фигня.

    теперь вопрос: как узнать размер кластера (ну или там блока, сектора, etc короче).

    если можно как-то это спросить у доса, кинте плиз номер прерывания...

    может где в примераз описано...

    в общем приветствуется всякая инфа...

    за ранее благодарю!
     
  2. Barmutik

    Barmutik Гость

    Использовать функцию GetDiskFreeSpace
     
  3. dag

    dag Гость

    <!--QuoteBegin-Barmutik+24:03:2005, 13:05 -->
    <span class="vbquote">(Barmutik @ 24:03:2005, 13:05 )</span><!--QuoteEBegin-->Использовать функцию GetDiskFreeSpace[/quote]
    неполучится к сожалению... надо именно использовать только простые функции и turbo paskal 7.0 ;)
     
  4. Barmutik

    Barmutik Гость

    Попробуйте это...

    Код (Text):
    TYPE
    PDiskInfo = ^TDiskInfo;
    TDiskInfo = RECORD
     SectorsPerCluster: BYTE;
     BytesPerSector,
     ClustersPerDisk: WORD;
     MediaDescriptor: BYTE;
    END;

    PROCEDURE DiskInfo(Drive: Char; Data: PDiskInfo);
    { Returns cluster/sector and media descriptor information of specified drive }
    ASM PUSH DS     { Function alters DS register }
     MOV  AH,$1C   { Get File Allocation Table Info }
     MOV  DL,Drive  { get drive letter }
     OR  DL,$20   { Convert Drive letter to lower case }
     SUB  DL,$60   { Convert drive letter to drive number }
    {$IFDEF MSDOS}
     INT  $21
    {$ENDIF}
    {$IFDEF WINDOWS}
     CALL DOS3Call
    {$ENDIF}
     LES  DI,Data  { Load pointer to TDiskInfo structure }
     STOSb      { save Sectors/cluster }
     MOV  AX,CX
     STOSw      { save bytes/sector }
     MOV  AX,DX
     STOSw      { save number of clusters }
     MOV  SI,BX   { load media descriptor offset }
     LODSb      { load media descriptor }
     STOSb      { save media descriptor }
     POP  DS
    END; { DiskInfo }
     
  5. -Alexx-

    -Alexx- Гость

    Прочитать BOOT-сектор логического диска (самый первый), а там лежит много полезной FAT информации, в том числе и размер кластера. Читать можно Си-шной biosdisk, но она работает только с винтами не более 2 гектар.
    Решение: нужно вызвать 13-ое расширенное прерывание (кажись 42-у функцию: AX=4200h), передав в качестве параметра дисковый пакет определенной структуры.
    Работает только в DOS и Win9x. Не помашает проверка на поддержку расширения этого прерывания.

    Кому интересно, моглу выслать коды со всеми структурами и функциями чтения.
    Email : "rytov_a@mail.ru"
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей