Frage

Ich bin auf der Suche nach einem einfachen Verfahren zu zippen und Komprimieren mit delphi. Ich habe bereits an den Komponenten bei torry delphi sah: http://www.torry.net /pages.php?s=99 . Sie alle scheinen, als ob sie würde erreichen, was ich will jedoch einige Nachteile zu ihnen ist, dass keiner von ihnen läuft in delphi 2009 und ist sehr komplex, was für mich in dem Hafen es schwierig macht, sie 2009 Delphi und neben der Dokumentation auf sie ist knapp, und zumindest für mich. Ich brauche grundlegende Zuziehen Funktionalität ohne den Overhead eine Reihe von DLLs zu verwenden. Meine Suche führte mich zu FSCTL_SET_COMPRESSION die ich dachte, würde das Problem angesiedelt haben, aber leider auch das funktionierte nicht. CREATE sah vielversprechend aus, bis ich versuchte es das gleiche Ergebnis wie FSCTL_SET ergab ... Ich weiß, dass es auf windows einig begrenzte einheimische Zuziehen Fähigkeit ist. Zum Beispiel, wenn man klickt Recht, eine Datei oder einen Ordner und wählt -> SENDTO -> Zip-Ordner wird ein ZIP-Archiv intelligent erstellt. Ich denke, wenn ich in der Lage war, diese Fähigkeit für den Zugriff von delphi es wird eine Lösung sein. Auf einer Seite zur Frage, tut Linux seine eigenen nativen Zuziehen Funktionen hat, die ähnlich wie diese verwendet werden können?

War es hilfreich?

Lösung

Turbopower ausgezeichneten Abbrevia für D2009 heruntergeladen werden hier , D2010 Unterstützung ist im Gange und bereits in nach ihrem Forum .

Abbrevia verwendete ein kommerzielles (für $$$) Produkt zu sein, was bedeutet, dass die Dokumentation ganz abgeschlossen ist.

Andere Tipps

I ZipForge verwenden. Warum gibt es Probleme diese D2009 portieren? Ist es, weil die 64-Bit-??

Hier ist ein Beispielcode

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;

Wenn Sie „tun“ COM von Delphi können, dann können Sie die Vorteile der integrierten ZIP-Fähigkeit der Windows-Shell übernehmen. Es gibt Ihnen eine gute Grundfähigkeit.

In VBScript sieht es wie folgt aus:

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 allws Sie auch benutzen DotNetZip , die ein kostenloser Download, die mit einem Kennwort verschlüsselt hat Reißverschlüsse, zip64, Selbst-extrahierende Archive, Unicode, überspannte Reißverschlüsse und andere Dinge.

Ich persönlich verwende VCL Zip, die mit D2009 läuft und D2010 völlig in Ordnung. es ist $ 120 zum Zeitpunkt von diesem Post kosten, aber ist sehr einfach, flexibel und vor allem schnell.

Hier finden Sie aktuelle VCLZIP und die Spur herunterladen, wenn Ihr Interesse

Code weise:

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

ist alles, was Sie für eine grundlegende zip benötigen, können Sie natürlich Satz Komprimierungsstufen, Verzeichnisstrukturen, zip-Streams, unzip-Streams und vieles mehr.

Hope dies ist etwas Unterstützung.

RE

Werfen Sie einen Blick auf diese Open Source SynZip Einheit . Es ist sogar noch schneller für die Dekomprimierung als die Standard-Einheit mit Delphi ausgeliefert, und es wird eine kleinere exe (crc Tabellen werden beim Start erstellt).

erzeugen

Keine externe DLL benötigt. Werke von Delphi 6 bis XE. Kein Problem mit Unicode-Version von Delphi. Alle in einem einzigen Gerät.

Ich habe gerade einige Änderungen vorgenommen, um Unicode-Dateinamen innerhalb von Zip-Inhalte zu verarbeiten, nicht nur Win-Ansi charset aber irgend Unicode Zeichen. Feedback ist willkommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top