Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Ярослав   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.036 c
3-1150457691
avsam
2006-06-16 15:34
2006.08.27
ODAC: Exec PL/SQL


1-1153218857
cosinus
2006-07-18 14:34
2006.08.27
Одновременная работа двух программ с одним COM-портом.


15-1153955958
Dust
2006-07-27 03:19
2006.08.27
Редактор исходного кода с аутлайнингом


4-1146644214
Zhekacoder
2006-05-03 12:16
2006.08.27
Как из Делфи узнать, что к компу подключена флэшка?


3-1150872268
Jakudza
2006-06-21 10:44
2006.08.27
Как в QuickReport сделать CrossTab отчет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский