Форум: "Основная";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
ВнизКак определить что это 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c