Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2008, 09:37   #1
IvanSCM
 
Аватар для IvanSCM
 
Регистрация: 01.11.2008
Сообщений: 9
По умолчанию прочитать файловый формат

Я в дельфи не новичек, но и не профи. Просто с таким я не сталкивался еще. Есть файл. Есть тех. документация на него. А как работать с бинарными файлами я незнаю.

12 байт заголовок файла. 4 byte - DWORD - section identifier
4 byte - DWORD - section size, including child sections and/or data
4 byte - DWORD - RW version ID.

Подскажите что не так?

Код:
type TDFFHeader = record
     ident, size, version: dword;
  end;

function readHeader(FileName: string): TDFFHeader;
var
  Buffer: byte;
  FS : TFileStream;
begin
  FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    FS.Read(Buffer, 12);
    with Result do 
    begin
      Version := ???????
    end;
  finally
    FS.Free;
  end;
end;
Gta Russian Racing Developer
- Ура!! наша мама девственица: закричали дети.
IvanSCM вне форума Ответить с цитированием
Старый 16.11.2008, 09:39   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

может var Buffer: не Byte a TDFFHeader.. и почему вы написали Vyte ? и писать можно не Read(Buffer, 12) а Read(Buffer, SizeOf(Buffer));
BOBAH13 вне форума Ответить с цитированием
Старый 16.11.2008, 09:44   #3
IvanSCM
 
Аватар для IvanSCM
 
Регистрация: 01.11.2008
Сообщений: 9
По умолчанию

Ничего не понял. Вы не могли бы поподробней. Буду благодарен если приведете пример.
Gta Russian Racing Developer
- Ура!! наша мама девственица: закричали дети.
IvanSCM вне форума Ответить с цитированием
Старый 16.11.2008, 09:51   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Код:
...
var
  buffer: TDFFHeader;
...
  FS.Read(buffer, sizeof(buffer));
...
pu4koff вне форума Ответить с цитированием
Старый 16.11.2008, 09:57   #5
IvanSCM
 
Аватар для IvanSCM
 
Регистрация: 01.11.2008
Сообщений: 9
По умолчанию

а как получить version
Gta Russian Racing Developer
- Ура!! наша мама девственица: закричали дети.
IvanSCM вне форума Ответить с цитированием
Старый 16.11.2008, 10:13   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от IvanSCM Посмотреть сообщение
а как получить version
Гм... вы говорите что вы не новичек ? и написать что трудное такое Buffer.Version ? :D надо вам для начала книжечку почитать...
BOBAH13 вне форума Ответить с цитированием
Старый 16.11.2008, 10:21   #7
IvanSCM
 
Аватар для IvanSCM
 
Регистрация: 01.11.2008
Сообщений: 9
По умолчанию

Получать version буду например так:
Код:
  with readDFFHeader(od.FileName) do
      begin
      Memo1.Lines.Add('Версия: '+IntToStr(Version));
      end
Не ясно откуда функция будет "знать" что TDFFHeader состоит из 12 байтов? И что version это 4 последних из этих 12ти?
Gta Russian Racing Developer
- Ура!! наша мама девственица: закричали дети.
IvanSCM вне форума Ответить с цитированием
Старый 16.11.2008, 10:31   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вы же писали что вам известен формат файла ? Или что, вы пишите работу с форматом файла а потом говорите что ничего незнаите о нем и как мне написать с ним работу ? ;D ну это уже сменшо...

Вам вопрос: Вы знаите или нет формат файла ? если нет тогда вообще зачем было вопрос задавать ?

тогда зачем вы писали это?
Цитата:
12 байт заголовок файла. 4 byte - DWORD - section identifier
4 byte - DWORD - section size, including child sections and/or data
4 byte - DWORD - RW version ID.
BOBAH13 вне форума Ответить с цитированием
Старый 16.11.2008, 10:39   #9
IvanSCM
 
Аватар для IvanSCM
 
Регистрация: 01.11.2008
Сообщений: 9
По умолчанию

Хорошо. Помогите мне написать код. Открыть файл, 4 байта занести в переменную section, следущие 4 в size, и следущие 4 в version.
Gta Russian Racing Developer
- Ура!! наша мама девственица: закричали дети.
IvanSCM вне форума Ответить с цитированием
Старый 16.11.2008, 10:51   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
var head: packed record
    section: DWORD;
    size: DWORD;
    version: DWORD
  end;
  f: File;
begin
  {$I-}
  AssignFile('strangefile.ext', f);
  Reset(f, 1);
  FillChar(head, SizeOf(head));
  BlockRead(f, head, SizeOf(head));
  CloseFile(f);
  {$I+}
end;
теперь юзайте поля head.Section или size или version... что не понятно ?
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать png формат в image Sin3v Общие вопросы Delphi 1 18.07.2008 11:45
Файловый архив Viteef О форуме и сайтах клуба 4 28.12.2007 02:16
файловый менеджер greyshadow Общие вопросы Delphi 3 16.09.2007 19:23