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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 04:29   #1
Snake22
Пользователь
 
Регистрация: 06.01.2011
Сообщений: 22
По умолчанию

Здравствуйте программисты. сам я в хексе,в чтении блоков файлов через дельфи почти не шарю,нужна помощь.
значит так, есть бинарный файл (контейнер) который содержит в себе другие файлы. (mif файл,содержит в себе 5 типов файлов: svg, svgb(сжатый svg),svgz(gzip), nvg и png)
нужно извлеч эти файлы.
Если посомтреть через хекс редактор,то там заметил что перед началом каждого файла есть символы (в текстовом виде C##4. В 16тиричном: 43 23 23 34 ),после этих цифр через несколько блоков начинаетс сам файл который надо извлеч. и так перед каждым файлом в бинарнике.
Также известны первые 8байт с которых начинается извлекаемый файл каждого типа, при этом файл svgb может начинаться с одной из 4х последовательностей байт:
Код:
const
      KBinaryFile1 = #$CC#$56#$FA#$03; //svgb
      KBinaryFile2 = #$CD#$56#$FA#$03; //svgb
      KBinaryFile3 = #$CE#$56#$FA#$03; //svgb
      KBinaryFile4 = #$CF#$56#$FA#$03; //svgb
      SVGZ_ENTRY_SIGNATURE = #$1F#$8B#$08#0; // GZip Prefix
      PNG_ENTRY_SIGNATURE = #137'PNG'; //PNG
      NVG_ENTRY_SIGNATURE = 'nvg'; //NVG
     //простой SVG идёт в обычном виде и определяется по xml заголовку "<?xml"


Помогите пожалуйста реализовать всё это в программу?
сам уже по этому делу немножко изучил как открыть файл,считать байт,переместить позицию в файле...но этого мало.
Я так понял для начала нужно следующее:
Найти позицию первого файла по заданным выше байтам, и дальше идти по файлу до тех пор пока не найдется позиция следующий файл.и теперь копируем первый файл от той позиции где начали до той где остановились. и дальше тоже самое для следующего файла...
Как же найти эту позицию начала первого файла и его длинну, и следующих?

И еще,для проверки определения какое должно быть расширение у файла на выходе,такую функцию мне написали:
Код:
type TMifFormat = (mfUnknown, mfSVG, mfSVGB, mfSVGZ, mfNVG, mfPNG, mfDAT,
mfMbmLink);

function MifEntryType(const MifEntryHeaderStr: ShortString): TMifFormat;//Здесь MifEntryHeaderStr - ANSI строка из 8 символов.
var TmpStr: ShortString;
begin
  result:=mfDAT; // unknown yet format, will be extracted with .dat extension
  TmpStr:=Copy(MifEntryHeaderStr, 1, 4);
  if (TmpStr=KBinaryFile1) or (TmpStr=KBinaryFile2) or
    (TmpStr=KBinaryFile3) or (TmpStr=KBinaryFile4) then
  result:=mfSVGB
  else
  if TmpStr=SVGZ_ENTRY_SIGNATURE then
  result:=mfSVGZ
  else
  if TmpStr=PNG_ENTRY_SIGNATURE then
  result:=mfPNG
  else
  if Copy(MifEntryHeaderStr, 1, 3)=NVG_ENTRY_SIGNATURE then
  result:=mfNVG
  else
  if (Copy(MifEntryHeaderStr, 1, 5)='<?xml') or
(MifEntryHeaderStr=#$EF#$BB#$BF'<?xml') or
    (TmpStr='<svg') then
  result:=mfSVG;
end;

Последний раз редактировалось Stilet; 23.01.2012 в 08:53.
Snake22 вне форума Ответить с цитированием
Старый 23.01.2012, 07:44   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

это оно http://mitab.maptools.org/?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение бинарного файла. Где ошибка? Sullla Общие вопросы Delphi 14 13.01.2012 11:09
чтение из бинарного файла Kukurudza Общие вопросы C/C++ 6 08.09.2011 19:09
Чтение данных из бинарного файла Faramir02 Общие вопросы C/C++ 3 22.12.2010 22:43
запись/чтение из бинарного файла. H1ghlander Общие вопросы C/C++ 0 21.11.2010 17:44
Чтение из бинарного файла. kir_rik Помощь студентам 2 04.06.2010 00:31