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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.041 c
3-1109679828
Valeriya
2005-03-01 15:23
2005.03.27
Drop table


1-1110404738
Мартын
2005-03-10 00:45
2005.03.27
Написал программу для выдирания паролей из Dial-Up, но...


1-1110563318
redlord
2005-03-11 20:48
2005.03.27
перебор рантайм объектов


14-1109928883
DelphiN!
2005-03-04 12:34
2005.03.27
Проблемма после переустановки версии компонентов


1-1110637945
Dyusha
2005-03-12 17:32
2005.03.27
Освобождение памяти из под формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский