Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Соединить и сжать несколько файлов в один

Delphi , Файловая система , Файлы

Соединить и сжать несколько файлов в один

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   Zlib;

 procedure CompressFiles(Files : TStrings; const Filename : String);
 var
   infile, outfile, tmpFile : TFileStream;
   compr : TCompressionStream;
   i,l : Integer;
   s : String;

 begin
   if Files.Count > 0 then
   begin
     outFile := TFileStream.Create(Filename,fmCreate);
     try
       { the number of files }
       l := Files.Count;
       outfile.Write(l,SizeOf(l));
       for i := 0 to Files.Count-1 do
       begin
         infile := TFileStream.Create(Files[i],fmOpenRead);
         try
           { the original filename }
           s := ExtractFilename(Files[i]);
           l := Length(s);
           outfile.Write(l,SizeOf(l));
           outfile.Write(s[1],l);
           { the original filesize }
           l := infile.Size;
           outfile.Write(l,SizeOf(l));
           { compress and store the file temporary}
           tmpFile := TFileStream.Create('tmp',fmCreate);
           compr := TCompressionStream.Create(clMax,tmpfile);
           try
             compr.CopyFrom(infile,l);
           finally
             compr.Free;
             tmpFile.Free;
           end;
           { append the compressed file to the destination file }
           tmpFile := TFileStream.Create('tmp',fmOpenRead);
           try
             outfile.CopyFrom(tmpFile,0);
           finally
             tmpFile.Free;
           end;
         finally
           infile.Free;
         end;
       end;
     finally
       outfile.Free;
     end;
     DeleteFile('tmp');
   end;
 end;

 procedure DecompressFiles(const Filename, DestDirectory : String);
 var
   dest,s : String;
   decompr : TDecompressionStream;
   infile, outfile : TFilestream;
   i,l,c : Integer;
 begin
   // IncludeTrailingPathDelimiter (D6/D7 only) 
  dest := IncludeTrailingPathDelimiter(DestDirectory);

   infile := TFileStream.Create(Filename,fmOpenRead);
   try
     { number of files }
     infile.Read(c,SizeOf(c));
     for i := 1 to c do
     begin
       { read filename }
       infile.Read(l,SizeOf(l));
       SetLength(s,l);
       infile.Read(s[1],l);
       { read filesize }
       infile.Read(l,SizeOf(l));
       { decompress the files and store it }
       s := dest+s; //include the path 
      outfile := TFileStream.Create(s,fmCreate);
       decompr := TDecompressionStream.Create(infile);
       try
         outfile.CopyFrom(decompr,l);
       finally
         outfile.Free;
         decompr.Free;
       end;
     end;
   finally
     infile.Free;
   end;
 end;

Статья Соединить и сжать несколько файлов в один раздела Файловая система Файлы может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Файлы ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-04-24 22:55:34
2024-04-25 02:04:26/0.0064599514007568/2