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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 18:17   #1
tozter
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 16
По умолчанию Delphi 7 - Определение сигнатуры файла

Надо определить по сигнатуре файла его тип.
Нашел такой пример:

http://www.gcmsite.ru/?pg=art&id=delphi-file-type

Код:
var
  MyBuf: PСhar;

// резервируем память для переменной работы с файлами
 GetMem(MyBuf, 10);

Вот текст функции: 
// проверяем считанные байты....
function CheckSign: string;
var
  res : boolean;
  res2 : string;
begin
  res := true;
  res2 := 'unknown';
  if (ord(MyBuf[0])=$ff) and (ord(MyBuf[1])=$fb) then
    begin res := false; res2 := 'mp3'; end;
  if res then if (ord(MyBuf[0])=$ff) and (ord(MyBuf[1])=$f3) then
    begin res := false; res2 := 'mp3'; end;
  if res then if (ord(MyBuf[0])=$52) and (ord(MyBuf[1])=$49) and
    (ord(MyBuf[2])=$46) and (ord(MyBuf[3])=$46) then
    begin res := false; res2 := 'wav mp3'; end;
  if res then if (ord(MyBuf[0])=$49) and (ord(MyBuf[1])=$44) and
    (ord(MyBuf[2])=$33) then
    begin res := false; res2 := 'mp3'; end;
  if res then if (ord(MyBuf[0])=$4d) and (ord(MyBuf[1])=$54) and
    (ord(MyBuf[2])=$68) and (ord(MyBuf[3])=$64) then
    begin res := false; res2 := 'mid'; end;
  if res then if (ord(MyBuf[0])=$ff) and (ord(MyBuf[1])=$d8) and
    (ord(MyBuf[2])=$ff) then
    begin res := false; res2 := 'jpg'; end;
  if res then if (ord(MyBuf[0])=$47) and (ord(MyBuf[1])=$49) and
    (ord(MyBuf[2])=$46) then
    begin res := false; res2 := 'gif'; end;
  if res then if (ord(MyBuf[0])=$00) and (ord(MyBuf[1])=$00) and
    (ord(MyBuf[2])=$01) then
    begin res := false; res2 := 'mpg mpeg'; end; 
  if res then if (ord(MyBuf[4])=$6d) and (ord(MyBuf[5])=$6f) and
    (ord(MyBuf[6])=$6f) and (ord(MyBuf[7])=$76) then
    begin res := false; res2 := 'mov'; end;
  if res then if (ord(MyBuf[0])=$30) and (ord(MyBuf[1])=$26) and
    (ord(MyBuf[2])=$b2) then
    begin res := false; res2 := 'asf'; end;
  if res then if (ord(MyBuf[0])=$25) and (ord(MyBuf[1])=$50) and
    (ord(MyBuf[2])=$44) then
    begin res := false; res2 := 'pdf'; end;
  if res then if (ord(MyBuf[0])=$ca) and (ord(MyBuf[1])=$fe) and
    (ord(MyBuf[2])=$ba) and (ord(MyBuf[3])=$be) and (ord(MyBuf[4])=$00) then
    begin res := false; res2 := 'class'; end;
  if res then if (ord(MyBuf[0])=$4d) and (ord(MyBuf[1])=$5a) and
    (ord(MyBuf[2])=$90) and (ord(MyBuf[3])=$00) then
    begin res := false; res2 := 'exe'; end;
  if res then if (ord(MyBuf[0])=$52) and (ord(MyBuf[1])=$61) and
    (ord(MyBuf[2])=$71) and (ord(MyBuf[3])=$21) and (ord(MyBuf[4])=$1a) and
    (ord(MyBuf[5])=$07) then
    begin res := false; res2 := 'rar'; end;
  if res then if (ord(MyBuf[0])=$50) and (ord(MyBuf[1])=$4b) and
    (ord(MyBuf[2])=$03) and (ord(MyBuf[3])=$04) and (ord(MyBuf[4])=$1a) and
    (ord(MyBuf[5])=$07) then
    begin res := false; res2 := 'zip'; end;

  Result := res2;
end;


// Очищаем память
FreeMem(MyBuf,10);
Но как его использовать не понятно....

Подскажите, пожалуйста.
tozter вне форума Ответить с цитированием
Старый 19.12.2010, 18:25   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
резервируем память для переменной работы с файлами
Порадовало, через раз работать будет? (шутка)

Вообще делаем так:
1. открываем файл (целевой)
2. прочитать первые байты в буфер - MyBuf
3. закрыть файл
4. вызвать функцию (дай бог сил тому кто ее писал) CheckSign

p.s. вроде так

UPD:
Цитата:
На примере покажи.
Спасибо, что так быстро ответил.
Ах да, сейчас. Так вот, так не пойдет

Последний раз редактировалось BOBAH13; 19.12.2010 в 18:49.
BOBAH13 вне форума Ответить с цитированием
Старый 19.12.2010, 18:30   #3
tozter
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Порадовало, через раз работать будет? (шутка)

Вообще делаем так:
1. открываем файл (целевой)
2. прочитать первые байты в буфер - MyBuf
3. закрыть файл
4. вызвать функцию (дай бог сил тому кто ее писал) CheckSign

p.s. вроде так

На примере покажи.
Спасибо, что так быстро ответил.

ЗЫЖ Всё ОК. Сам разобрался. =)

Последний раз редактировалось tozter; 19.12.2010 в 18:55.
tozter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение подлиности файла tae1980 Microsoft Office Excel 2 25.11.2010 16:37
определение размера PE файла wmzvov Win Api 2 16.11.2010 13:57
Определение имени файла по ссылке dimfil Общие вопросы C/C++ 0 05.03.2010 13:41
Создание сигнатуры функций для поиска их в памяти процесса Zlyden' Общие вопросы C/C++ 10 01.03.2010 21:27
Перезапись файла без путя или определение расположения файла программы The Best Общие вопросы Delphi 4 13.07.2009 22:50