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

Вниз

Архивирование   Найти похожие ветки 

 
qwe   (2005-03-14 10:21) [0]

Помогите пожалуйста в следеющем вопросе. Есть N файлов и их необходимо собрать в 1 архив , конечно же средствами Delphi


 
Anatoly Podgoretsky ©   (2005-03-14 11:04) [1]

Ну потребность твоя понятно, а вопрос есть?


 
qwe   (2005-03-14 11:11) [2]

ну вопрос:)  в этом то и весь вопрос, как это сделать


 
Anatoly Podgoretsky ©   (2005-03-14 11:14) [3]

Написать программу.


 
qwe   (2005-03-14 11:16) [4]

ннндааааа  пасибо , очень помог


 
Anatoly Podgoretsky ©   (2005-03-14 11:17) [5]

Ну так задавай конкретный вопрос, а не ходи вокруг да около.


 
XP   (2005-03-14 11:19) [6]

1. Создать нетипизированный конечный файл.
2. Открывать по очереди исходные файлы, читать в буфер и писать в конечный файл. Не забывать закрыть исходный файл.
3. Закрыть конечный файл.

AssignFile(DestinationFile, );
Rewrite(DestinationFile);
try
 for i := 0 to SourceFileCount - 1 do
 begin
   AssignFile(SourceFile, );
   Reset(SourceFile);
   try
     BlockRead(SourceFile, );
     BlockWrite(DestinationFile, );
   finally
     CloseFile(SourceFile);
   end;  
 end;  
finally
 FileClose(DestinationFile);
end;


Или то же самое, но через потоки TFileStream.


 
qwe   (2005-03-14 11:21) [7]

так подожди , это получится мы сольем все файлы в один, это я уже делал , но мне сказали что бы сделал архивацию ,


 
Anatoly Podgoretsky ©   (2005-03-14 11:22) [8]

Это и есть архивная, компаундная копия.


 
qwe   (2005-03-14 11:24) [9]

да? ну ладно пасибо , проверим


 
Erik1 ©   (2005-03-14 11:48) [10]

Можно использовать архиватор, например Dll которому можно передать список файлов и команду. Конечно есть возможность использовать компонент(ZipTV), но это для небольших архивов(<100Мб)


 
XP   (2005-03-14 11:54) [11]

но мне сказали что бы сделал архивацию

Делайте перед каждым записываемым файлом заголовок с названием исходного файла, размером, списком аттрибутов и пр.

P.S. И, когда пишете в вопросе "собрать", не забудьте уточнить, надо ли Вам его потом "разбирать".


 
raidan ©   (2005-03-14 12:01) [12]

>XP   (14.03.05 11:54) [11]
Аналог tar"а.
tar без ключика на сжатие не является архиватором.


 
XP   (2005-03-14 12:06) [13]

Я бы сказал по-другому.
Сжатие данных - полезная функция любого архиватора.
На самом деле, архивация, по определению, не предусматривает сжатия данных как такового.
Поэтому, насколько я помню, все "архиваторы" (в данном контексте это слово не совсем верное), как ZIP, так и RAR и иже с ними, могут просто "заливать" несколько файлов в один, не выполняя при этом никакой "упаковки".

А про алгоритм возможного сжатия автор вопроса не сказал ни слова.


 
qwe   (2005-03-14 12:09) [14]

ну да про алгорит сжатия я не говоил , но имелл ввиду
а вот Erik1  про компоненты можно поподробнее


 
Anatoly Podgoretsky ©   (2005-03-14 12:11) [15]

Не надо путать сжатие и архивирование, второе подразумевает тольно одно - создание архивной копии.


 
XP   (2005-03-14 12:14) [16]

Статистика говорит, что на 90% вопросов можно отвечать односложно: http://www.torry.net


 
leonidus ©   (2005-03-14 13:46) [17]

Юзай VCLZip


 
qwe   (2005-03-14 14:31) [18]

leonidus это стандартный дельфийский компонет?


 
NE_Parovoz   (2005-03-14 14:48) [19]

qwe
ZLib.pas


 
qwe   (2005-03-14 15:03) [20]

о пасибо :))))


 
seregka   (2005-03-14 18:55) [21]

Для ZLib:
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;


 
qwe   (2005-03-14 19:05) [22]

спасибо выручил seregka  , то начинают , то вопрос не поняли, то не так поставил:)))))



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

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

Наверх




Память: 0.52 MB
Время: 0.044 c
3-1109412494
Walker
2005-02-26 13:08
2005.03.27
Нужен компонент а-ля Access "поле со списком"


3-1109500901
xman
2005-02-27 13:41
2005.03.27
Создание схемы в базе ORACLE


9-1104873227
Tankist
2005-01-05 00:13
2005.03.27
Как менять гамму в Direct3D


1-1110900914
Руслана
2005-03-15 18:35
2005.03.27
Можно ли отловить такое событие...


1-1110895436
Mamed
2005-03-15 17:03
2005.03.27
UrlEncode