Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить что это zip или rar файл по заголовку? [D6, Win95/98, Win2k]


Filat ©   (2002-08-01 20:35:00) 

Привет ALL!
Возникла проблема, надо по заголовку (до работы с файлом) определить, какой файл лежит в каталоге. Как это сделать?
Когда то видел в форумах, но не могу найти :(((

P.S. Идея - избежать запуска файлов с вирусами, т.е. *.pif.zip или *.*.rar и т.д. Поможет ли?


Skier   (2002-08-02 14:34:00) [1]

>Filat

>
> но как это дело применить?


Примерно так :


procedure TForm1.Button2Click(Sender: TObject);

type
TArchiveType = (atZIP, atRAR);

function FileIsSuitable(const AFileName : String ; const AType : TArchiveType) : Boolean;
const
ZIP_SIGNATURE = $4B50;
RAR_SIGNATURE = $21726152;
var
ABytesToRead : Word;
AFile : file of Byte;
ABuffer : PByteArray;
ASignature : LongWord;
ACorrectSize : Boolean;
begin
Result := False;
ASignature := 0;
ABytesToRead := 0;
try
if not FileExists(AFileName) then Exit;
case AType of
atZIP : ABytesToRead := 2;
atRAR : ABytesToRead := 4;
end; //case
AssignFile(AFile, AFileName);
ABuffer := AllocMem(ABytesToRead * SizeOf(Byte));
try
Reset(AFile);
ACorrectSize := FileSize(AFile) >= ABytesToRead;
if ACorrectSize then begin
BlockRead(AFile, ABuffer^, ABytesToRead);
Move(ABuffer^, ASignature, ABytesToRead)
end; //if
finally
FreeMem(ABuffer, ABytesToRead * SizeOf(Byte));
CloseFile(AFile);
end; //try
if ACorrectSize then begin
case AType of
atZIP : Result := ASignature = ZIP_SIGNATURE;
atRAR : Result := ASignature = RAR_SIGNATURE;
end; //case
end; //if
except
raise;
end; //try
end; //FileIsSuitable

begin
WriteLn(FileIsSuitable("D:\Projects\Delphi\5
\Mttl\Storage\9.zip", atZIP));
WriteLn(FileIsSuitable("D:\Projects\Delphi\5
\Mttl\Storage\Examples.rar", atRAR));
end;


Anatoly Podgoretsky   (2002-08-02 13:59:00) [2]

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


Filat   (2002-08-02 13:52:00) [3]

Спасибо, но как это дело применить?

И ещё, если не трудно, дайте ссылочку, чтобы почитать описания сигнатур по другим форматам.


Almaz   (2002-08-02 02:36:00) [4]

Первые четыре байта RAR архива содержат сигнатуру "Rar!" ($52617221)
Первые 2 байта ZIP архива содержат сигнатуру "PK" ($504b)

Удачи.


Anatoly Podgoretsky   (2002-08-01 22:25:00) [5]

Вот если еще расскажешь насчет заголовка


Filat   (2002-08-01 21:39:00) [6]

Anatoly Podgoretsky - это понятно, но прога будет работать в автомате и круглые сутки.

А если серьёзно? Как определить какой файл по его заголовку?


Anatoly Podgoretsky   (2002-08-01 21:19:00) [7]

Глазами


Наверх

Титульная страница Поиск, карта сайта Написать письмо