2009-10-27 22 views
2

Je cherche une méthode simple de zipper et de compression avec delphi. J'ai déjà regardé les composants à torry delphi: http://www.torry.net/pages.php?s=99. Ils ont tous l'air d'accomplir ce que je veux mais quelques inconvénients à les utiliser est qu'aucun d'entre eux ne fonctionne dans Delphi 2009 et sont très complexes, ce qui me rend difficile de les porter à Delphi 2009. Et d'ailleurs, la documentation sur ils sont rares, bien au moins pour moi. J'ai besoin de la fonctionnalité de base de zipping sans la surcharge de l'utilisation d'un tas de DLL. Ma quête m'a conduit à FSCTL_SET_COMPRESSION qui, selon moi, aurait réglé le problème mais malheureusement, cela n'a pas fonctionné non plus. CREATEFILE a semblé prometteur, jusqu'à ce que je l'ai essayé a donné le même résultat que FSCTL_SET ... Je sais qu'il y a une certaine capacité native de zipper sur Windows. Par exemple, si un clic droit sur un fichier ou un dossier et sélectionne -> sendTo -> dossier compressé, une archive zippée est intelligemment créée. Je pense que si je pouvais accéder à cette capacité de Delphi, ce serait une solution. D'un autre côté, Linux a-t-il ses propres fonctions zippées qui peuvent être utilisées de la même manière?toutes les fonctions pour créer un fichier zip du répertoire/fichier sur vista avec delphi 2009

+1

Cette question est très similaire - vous pouvez trouver quelques réponses utiles: http://stackoverflow.com/questions/1082735/creating-compressed-zipped-folder-using-delphi – Argalatyr

Répondre

4

L'excellent Abbrevia de TurboPower peut être téléchargé pour D2009 here, le support D2010 est en cours et déjà disponible dans svn according to their forum. Abbrevia était un produit commercial (pour $$$), ce qui signifie que la documentation est assez complète.

0

J'utilise Zipforge. Pourquoi y a-t-il des problèmes de portage vers D2009? Est-ce à cause du 64bit ??

Voici quelques exemples de code

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; 
+0

Delphi 2009 n'est pas 64-bit – jpfollenius

0

Si vous pouvez « faire » COM à partir de Delphi, vous pouvez profiter de la capacité de fermeture intégrée de l'environnement Windows. Cela vous donne une bonne capacité de base.

En VBScript, il ressemble à ceci:

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 aussi vous allws à utiliser DotNetZip, qui est un téléchargement gratuit, qui ne zips mot de passe crypté, Zip64, archives auto-extractibles, unicode, fractionnés fermetures éclair , et d'autres choses.

0

Personnellement, j'utilise VCL Zip qui fonctionne parfaitement avec D2009 et D2010. il coûte 120 $ au moment de ce post mais il est très simple, flexible et surtout RAPIDE.

Jetez un oeil à VCLZIP et télécharger la piste si vous êtes intéressé

Code

sage:

VCLZip1.ZipName := ‘myfiles.zip’; 
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’); 
VCLZip1.Zip; 

est tout ce dont vous avez besoin pour un zip de base, vous pouvez des niveaux de compression ensemble de cours, les structures d'annuaire, Zip flux, décompresser les flux et bien plus encore.

Nous espérons que cela vous aidera.

RE

0

Jetez un oeil à ce OpenSource SynZip unit. Il est encore plus rapide pour la décompression que l'unité par défaut livrée avec Delphi, et il générera un exe plus petit (les tables crc sont créées au démarrage).

Aucune DLL externe n'est nécessaire. Fonctionne depuis Delphi 6 jusqu'à XE. Pas de problème avec la version Unicode de Delphi. Tout dans une seule unité.

Je viens de faire quelques changements pour gérer les noms de fichiers Unicode dans le contenu Zip, pas seulement le charset Win-Ansi, mais tous les caractères Unicode. Les commentaires sont les bienvenus.