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

Вниз

Распаковка&упаковка псевдо-архива   Найти похожие ветки 

 
Ярослав   (2006-07-13 10:58) [0]

Мне нужо распаковать и упаковать псевдо-архив, в котором хранятся 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;


А упаковать файлы в такой псевдо-архив у меня не получается...


 
Dmitrij_K   (2006-07-13 11:37) [1]

Что не получается. Все просто, пишешь размер файла 4 байта, пишешь содержимое файла. Итд


 
Dmitrij_K   (2006-07-13 11:57) [2]

Примерно так
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;


 
Ярослав   (2006-07-13 13:14) [3]

Спасибо вам, Dmitrij_K!


 
Ярослав   (2006-07-13 13:14) [4]

Спасибо вам, Dmitrij_K!



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

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

Наверх




Память: 0.47 MB
Время: 0.038 c
2-1155022166
4IZH
2006-08-08 11:29
2006.08.27
программное перемещение указателя мыши


11-1131525779
algambra
2005-11-09 11:42
2006.08.27
В любом месте области формы по клику мышки срабатывает процедура


15-1154427261
lurce
2006-08-01 14:14
2006.08.27
Советский Энциклопедический Словарь в эл. виде


15-1153996666
StriderMan
2006-07-27 14:37
2006.08.27
ООП vs Copy/Paste


2-1155058414
Bober
2006-08-08 21:33
2006.08.27
GetFileSize