Форум: "Основная";
Текущий архив: 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