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

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

Распаковка&упаковка псевдо-архива [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 байта, пишешь содержимое файла. Итд


Наверх

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