quaisquer funções para criar arquivo zip do diretório / arquivo no Vista com Delphi 2009
-
06-07-2019 - |
Pergunta
Eu estou procurando um método simples de compactação e comprimindo com delphi. Já olhou para os componentes em torry delphi: http://www.torry.net /pages.php?s=99 . Eles todos parecem como se iria conseguir o que eu quero no entanto algumas desvantagens para usá-los é que nenhum deles executado em delphi 2009 e são muito complexas que torna difícil para mim porta-los para o Delphi 2009. E, além disso, a documentação sobre eles é escasso, bem, pelo menos para mim. Preciso funcionalidade básica de compactação sem a sobrecarga de usar um grupo de DLLs. A minha busca me levou a FSCTL_SET_COMPRESSION que eu pensei que teria resolvido o problema, mas infelizmente isso também não funcionou. CreateFile parecia promissor, até que eu tentei rendeu o mesmo resultado que FSCTL_SET ... Eu sei que há alguma capacidade de compactação nativa limitada em janelas. Por exemplo, se um direito clica em um arquivo ou pasta e seleciona -> sendTo -> pasta zipada, um arquivo zipado é inteligentemente criado. Eu acho que se eu era capaz de acesso que a capacidade de delphi será uma solução. Por uma questão de lado, o Linux tem suas próprias funções fechando nativas que podem ser usados ??semelhante a isto?
Solução
excelente Abbrevia de TurboPower pode ser baixado D2009 aqui , suporte D2010 está em andamento e já está disponível svn de acordo com sua fórum.
Abbrevia costumava ser um produto comercial (para $$$), o que significa que a documentação é bastante completo.
Outras dicas
Eu uso ZipForge. Por que existem problemas portar estes a D2009? É por causa da 64bit ??
Aqui está um código de exemplo
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;
Se você pode "fazer" COM da Delphi, em seguida, você pode aproveitar o recurso interno de zip do shell do Windows. Dá-lhe boa capacidade básica.
Em VBScript, parece que isso:
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 também allws você use DotNetZip , que é um download gratuito, que faz zips criptografados por senha, zip64, auto-extraível arquivos, unicode, fechos estendidos, e outras coisas.
Pessoalmente eu uso VCL Zip que corre com D2009 e D2010 perfeitamente bem. que não custa US $ 120 no momento deste post, mas é muito simples, flexível e, acima de tudo rápido.
Tenha um olhar em VCLZIP e descarregue a trilha se estiver interessado
código sábio:
VCLZip1.ZipName := ‘myfiles.zip’;
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’);
VCLZip1.Zip;
é tudo que você precisa para um zip básicos, você pode de definir níveis curso de compressão, estruturas de diretórios, ZIP córregos, riachos descompactar e muito mais.
Espero que este seja de alguma ajuda.
RE
Dê uma olhada neste OpenSource SynZip unidade . É ainda mais rápido para a descompressão do que a unidade padrão fornecido com Delphi, e vai gerar um exe menor (mesas de CRC são criados na inicialização).
Não é necessário dll externo. Obras de Delphi 6 até XE. Nenhum problema com a versão Unicode de Delphi. Tudo em uma única unidade.
Eu só fiz algumas mudanças para lidar com nomes de arquivo Unicode dentro Zip conteúdo, não só charset Win-Ansi, mas quaisquer caracteres Unicode. O feedback é bem-vindo.