Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

Как определить что это zip или rar файл по заголовку?   Найти похожие ветки 

 
Filat ©   (2002-08-01 20:35) [0]

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

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


 
Anatoly Podgoretsky ©   (2002-08-01 21:19) [1]

Глазами


 
Filat ©   (2002-08-01 21:39) [2]

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

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


 
Anatoly Podgoretsky ©   (2002-08-01 22:25) [3]

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


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

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

Удачи.


 
Filat ©   (2002-08-02 13:52) [5]

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

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


 
Anatoly Podgoretsky ©   (2002-08-02 13:59) [6]

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


 
Skier ©   (2002-08-02 14:34) [7]

>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;



Страницы: 1 вся ветка

Текущий архив: 2002.08.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-48101
xerox
2002-08-05 13:27
2002.08.15
Подскажите как можно увеличить или уменьшить изображение


1-48145
DeBuGeR
2002-07-31 20:05
2002.08.15
Баг в дельфи?


1-48198
BAY
2002-08-02 20:45
2002.08.15
GIF


1-48108
Smok_er
2002-08-05 13:49
2002.08.15
Событие, возникающее в момент, когда окно становится неактивным


1-48206
KIR
2002-07-09 13:10
2002.08.15
Печать даграмм