![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Распаковка&упаковка псевдо-архива [D7]
Ярослав © (2006-07-13 10:58:00)Мне нужо распаковать и упаковать псевдо-архив, в котором хранятся png-файлы.
Пример такого архива - http://e-commers.ru/cbs.rar
Вот код распаковки:
procedure UnpackSTG(const InFile,OutDir:string);
var
A:Integer;
Stream:TFileStream;
ASize:DWORD;
begin
if DirectoryExists(OutDir)=false then CreateDir(OutDir);
Stream:=TFileStream.Create(InFile,fmOpenRead);
try
A:=1;
while Stream.Read(ASize,SizeOf(ASize))=SizeOf(ASize) do
with TFileStream.Create(Format('%s%d.png',
[IncludeTrailingBackSlash(OutDir),A]),fmCreate) do try
CopyFrom(Stream,ASize);
Inc(A);
finally
Free;
end;
finally
Stream.Free;
end;
end;
А упаковать файлы в такой псевдо-архив у меня не получается...
Ярослав (2006-07-13 13:14:00) [1]Спасибо вам,
Dmitrij_K!
Ярослав (2006-07-13 13:14:00) [2]Спасибо вам, Dmitrij_K!
Dmitrij_K (2006-07-13 11:57:00) [3]Примерно так
procedure PackSTG(const InFile,OutDir:string);
var
Stream:TFileStream;
Stream2:TFileStream;
ASize:DWORD;
ssr:TSearchRec;
begin
Stream := TFileStream.Create(InFile,fmCreate);
try
if FindFirst(outdir+'*.png', faAnyFile, ssr)=0 then
repeat
Stream2 := nil;
try
Stream2 := TFileStream.Create(ssr.Name,fmOpenRead);
ASize := Stream2.Size;
Stream.Write(asize, SizeOf(ASize));
Stream.CopyFrom(Stream2, asize);
finally
Stream2.Free;
end;
until FindNext(ssr)<>0;
FindClose(ssr);
finally
Stream.Free;
end;
end;
Dmitrij_K (2006-07-13 11:37:00) [4]Что не получается. Все просто, пишешь размер файла 4 байта, пишешь содержимое файла. Итд