Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Адрес файла в фат32
Посл.ответ Сообщение

Ранг: 4.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2010 19:29
· Личное сообщение · #1

Есть фат32, также мы имеем "Номер начального кластера файла в таблице расположения файлов (16 бит)", подскажите плз, как по этим двум байтам найти начало содержимого файла? Что это вообще за номер/адрес? Как-то не нашел подробной инфы в инете.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 17 мая 2010 19:58 · Поправил: OKOB
· Личное сообщение · #2

первоисточник
http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
перепевы
http://remont-pc.ru/1109-podrobnoe-opisanie-fajjlovojj-sistemy-fat32.h tml
а вообще инфы валом

что вопрос делает в основном форуме???

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 4.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2010 23:52
· Личное сообщение · #3

Спасибо за ссылки. Видел, инфы не нашел/не понял. Объясните кто-нибудь плз в двух словах, куда ведут эти два байта адреса.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 18 мая 2010 12:46
· Личное сообщение · #4

Code:
  1. typedef struct _fat_bpb {
  2.          s8      ignored[3]; /* Boot strap short or near jump */
  3.          s8      system_id[8]; /* Name - can be used to special case
  4.                                  partition manager volumes */
  5.          u8      bytes_per_sect[2]; /* bytes per logical sector */
  6.          u8      sects_per_clust;/* sectors/cluster */
  7.          u16     reserved_sects; /* reserved sectors */
  8.          u8      num_fats; /* number of FATs */
  9.          u16     dir_entries; /* root directory entries */
  10.          u8      short_sectors[2]; /* number of sectors */
  11.          u8      media; /* media code (unused) */
  12.          u16     fat_length; /* sectors/FAT */
  13.          u16     secs_track; /* sectors per track */
  14.          u16     heads; /* number of heads */
  15.          u32     hidden; /* hidden sectors (unused) */
  16.          u32     long_sectors; /* number of sectors (if short_sectors == 0) */
  17.  
  18.          /* The following fields are only used by FAT32 */
  19.          u32     fat32_length; /* sectors/FAT */
  20.          u16     flags; /* bit 8: fat mirroring, low 4: active fat */
  21.          u8      version[2]; /* major, minor filesystem version */
  22.          u32     root_cluster; /* first cluster in root directory */
  23.          u16     info_sector; /* filesystem info sector */
  24.          u16     backup_boot; /* backup boot sector */
  25.          u16     reserved2[6]; /* Unused */
  26.  
  27. } fat_bpb;


Code:
  1. fat_bpb *bpb = fs_header;
  2.                  u32      fat_offset = bpb->reserved_sects;
  3.                  u32      fat_length = bpb->fat_length ? bpb->fat_length : bpb->fat32_length;
  4.                  u32      root_offs  = fat_offset + (bpb->num_fats * fat_length);
  5.                  u32      root_max, data_offs;
  6.  
  7.                  if (root_max = bpb->dir_entries * FAT_DIRENTRY_LENGTH) {
  8.                         data_offs = root_offs + ((root_max - 1) / bps) + 1;
  9.                  } else {
  10.                         data_offs = root_offs;
  11.                  }

На входе fs_header - содержимое первого сектора ФС, bps - число байт в секторе. На выходе data_offs - смещение первого кластера ФС.

-----
PGP key <0x1B6A24550F33E44A>



 eXeL@B —› Программирование —› Адрес файла в фат32
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати