любые функции для создания zip-файла каталога / file в vista с delphi 2009
-
06-07-2019 - |
Вопрос
Я ищу простой метод архивирования и сжатия с помощью delphi.Я уже ознакомился с компонентами в torry delphi:http://www.torry.net/pages.php?s=99.Все они выглядят так, как будто они выполнят то, что я хочу, однако несколько недостатков в их использовании заключаются в том, что ни один из них не запускается в delphi 2009 и являются очень сложными, что затрудняет их перенос в delphi 2009.И, кроме того, документация по ним скудна, по крайней мере, для меня.Мне нужна базовая функциональность архивирования без накладных расходов, связанных с использованием кучи библиотек DLL.Мои поиски привели меня к FSCTL_SET_COMPRESSION, которое, как я думал, решило бы проблему, но, к сожалению, это тоже не сработало.CREATEFILE выглядел многообещающе, пока я не попробовал, он дал тот же результат, что и FSCTL_SET...Я знаю, что в Windows существуют некоторые ограниченные возможности встроенной архивации.Например, если щелкнуть правой кнопкой мыши файл или папку и выбрать -> Отправить -> архивированная папка, то будет быстро создан архивированный архив.Я думаю, что если бы я смог получить доступ к этой возможности из delphi, это было бы решением.Что касается побочного вопроса, есть ли в linux свои собственные функции архивирования, которые можно использовать аналогично этому?
Решение
Отличную аббревиатуру TurboPower можно загрузить для D2009 здесь , поддержка D2010 уже ведется и уже доступна в svn в соответствии с их форумом .
Аббревиатура раньше была коммерческим (для $$$) продуктом, что означает, что документация довольно полная.
Другие советы
Я использую Zipforge. Почему возникают проблемы с портированием их на D2009? Это из-за 64-битного ??
Вот пример кода
procedure ZipIt;
var
Archiver: TZipForge;
FileName: String;
begin
try
Archiver:= TZipForge.create(self);
with Archiver do begin
FileName := 'c:\temp\myzip.zip';
// Create a new archive file
OpenArchive(fmCreate);
// Set path to folder with some text files to BaseDir
BaseDir := 'c:\temp\';
// Add all files and directories from 'C:\SOURCE_FOLDER' to the archive
AddFiles('myfiletozip.txt');
// Close the archive
CloseArchive;
end;
finally
Archiver.Free;
end;
end;
Если вы можете " сделать " COM от Delphi, тогда вы можете воспользоваться встроенной функцией zip оболочки Windows. Это дает вам хорошие базовые возможности. Р>
В VBScript это выглядит так:
Sub CreateZip(pathToZipFile, dirToZip)
WScript.Echo "Creating zip (" & pathToZipFile & ") from folder (" & dirToZip & ")"
Dim fso
Set fso= Wscript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(pathToZipFile) Then
WScript.Echo "That zip file already exists - deleting it."
fso.DeleteFile pathToZipFile
End If
If Not fso.FolderExists(dirToZip) Then
WScript.Echo "The directory to zip does not exist."
Exit Sub
End If
NewZip pathToZipFile
dim sa
set sa = CreateObject("Shell.Application")
Dim zip
Set zip = sa.NameSpace(pathToZipFile)
WScript.Echo "opening dir (" & dirToZip & ")"
Dim d
Set d = sa.NameSpace(dirToZip)
For Each s In d.items
WScript.Echo s
Next
' http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx
' ===============================================================
' 4 = do not display a progress box
' 16 = Respond with "Yes to All" for any dialog box that is displayed.
' 128 = Perform the operation on files only if a wildcard file name (*.*) is specified.
' 256 = Display a progress dialog box but do not show the file names.
' 2048 = Version 4.71. Do not copy the security attributes of the file.
' 4096 = Only operate in the local directory. Don't operate recursively into subdirectories.
WScript.Echo "copying files..."
zip.CopyHere d.items, 4
' wait until finished
sLoop = 0
Do Until d.Items.Count <= zip.Items.Count
Wscript.Sleep(1000)
Loop
End Sub
COM также позволяет использовать DotNetZip , бесплатную загрузку, которая выполняет зашифрованные паролем архивы, zip64, самораспаковывающиеся архивы, юникод, составные почтовые индексы и другие вещи. Р>
Лично я использую VCL Zip, который отлично работает с D2009 и D2010.на момент написания этого поста это действительно стоило 120 долларов, но является очень простым, гибким и, самое главное, БЫСТРЫМ.
Взгляните на VCLZIP и скачайте трейл, если вам интересно
с точки зрения кода:
VCLZip1.ZipName := ‘myfiles.zip’;
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’);
VCLZip1.Zip;
это все, что вам нужно для базового zip-файла, вы, конечно, можете устанавливать уровни сжатия, структуры каталогов, zip-потоки, распаковывать zip-потоки и многое другое.
Надеюсь, это окажет вам некоторую помощь.
РЕ
Посмотрите на этот модуль OpenSource SynZip . Это даже быстрее для распаковки, чем модуль по умолчанию, поставляемый с Delphi, и он создаст меньший exe (таблицы crc создаются при запуске).
Внешние DLL не нужны. Работает от Delphi 6 до XE. Нет проблем с Unicode-версией Delphi. Все в одном блоке.
Я только что внес некоторые изменения для обработки имен файлов Unicode внутри содержимого Zip, не только для кодировки Win-Ansi, но и для любых символов Unicode. Обратная связь приветствуется.