ZIP - Packen / Entpacken mit Windows eigener Funktion

  • Hi,
    hiermit könnt ihr ZIP-Archive mit dem in Windows integrierten ZIP erstellen:


    Parameter $iIndexBase=1 ==> Falls das übergebene Array an Pos 0 einen Zähler führt ist BaseIndex=1 (Standard).
    _FileListToArray kann man leider nicht für das Array verwenden, da diese Funktion nicht den Pfad ausliest.


    Edit:
    NEU - nun auch Entpacken.


    Edit2:
    Fixed - Fehler Variablenname. Beim Zusammenführen der beiden Funktionen hatte ich vergessen die Variablennamen anzugleichen. Und keiner hats gemerkt ;-)


    Edit3:
    Fixed - Relative Dateinamen. Der Pfad zur Zip-Datei kann jetzt relativ angegeben werden. Danke Oscar für den Hinweis.


  • Hallo BugFix!
    Eine nette Funktion, allerdings gibt es einen Fehler ("The requested action with this object has failed."), wenn man für das ZIP-Archiv eine relative Pfadangabe (z.B. einfach nur "test.zip") verwendet.
    Diesen Fehler könntest Du aber noch abfangen, indem Du an den Anfang Deiner Funktion folgendes einfügst:
    $sPath = FileGetLongName($sPath, 1)
    Mit dem optionalen Parameter ",1" werden relative Pfade in absolute Pfade umgewandelt.


    Ansonsten: sehr gut! Kommt in mein Archiv! :thumbsup:

  • Man kann auch einen Ordner angeben, den man packen möchte! Das Problem ist nur, dass man ohne weiteres nicht prüfen kann, wann der Pack Thread beendet ist!


    Hier meine Testversion:


    Ich habe versucht, bevor das Packen anfängt, ein Snapshot von the Threads zu machen. Das Packen ist genau dan fertig, wenn der Urzustand der Threads wieder erreicht ist!


    Kennt jemand eine bessere Lösung?


    Gruß,
    UEZ

  • Hallo,


    wie kann ich abfragen, ob die dll (zipfldr.dll) auch registriert ist?
    Unter XP bekomme ich nach dem Ausführen von regsvr32.dll /u zipfldr.dll und anschließendem versuch ne Datei zu packen/entpacken logischerweise ne Fehlermeldung.
    Ich könnte natürlich die zipfldr.dll per AutoIt auch wieder registrieren, aber mich würde interessieren, ob ich mit AutoIt auch den Registrierungszustand einer DLL abfragen kann.
    Hat da jemand nen Tipp (Wink mit nem Zaunpfahl ;-) ) für mich?



    Gruss

  • Sieht gut aus :thumbsup:


    Mfg. Simon

    Mfg.simon

    Zitat

    Copyright hinweise und sonstige Hinweise des Autors sind dringenst zu Beachten !!!

    Momentane Projekte & Co.
    - Visual C++ bzw. Borland C++ lernen
    - "Packprogramm" in AutoI


  • Ich hab mal in der Registry gesucht, vielleicht ist ja was dabei ;) (Bei mir war die CLSID für CompressedFolder {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31})

    Code
    1. HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\DUIBags\ShellFolders\{E88DCCE0-B7B3-11D1-A9F0-00AA0060FA31}
    2. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}
    3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved [Key mit der CLSID muss existieren?)
  • Hallo BugFix,


    bin gerade am Testen deiner Func. Bekomme leider folgende Fehlermeldung:

    Hier das Skript das diese Meldung verursacht:

    was mache ich falsch :?: Ich wollte deine Funktion testen, damit ich hier: [ offen ] Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden) helfen kann,


    mfg (Auto)Bert

  • Hallo Oscar ,


    danke für den Hinweis (hätte wohl den Eröffnungspost besser lesen sollen). So klappt's:


    mfg (Auto)Bert


  • also das funktioniert bei mir nicht. hab das 1 zu 1 übernommen und bei mir kommt dieser fehler:



    EDIT:


    Problem war, das dies nur funktioniert wenn die 7z.exe und die 7z.dll im selben pfad liegen.

    Denke nicht gedacht zu haben,
    den das denken, ist ein gedankenloses denken

    Einmal editiert, zuletzt von Inferior ()

  • Hallo,


    wenn ich die ZIP Datei entpacke und alle Datein überschreiben möchte bekomme ich immer die Windows Hinweis Meldung, ob die Dateien wirklich überschrieben werden sollen.


    Kann man irgendwie schon im Script einstellen, dass er überschreiben soll ohne Nachzufragen?


    Ahja ich habe WinVista in Benutzung.

  • Hallo BugFix,
    ich habe mal eine Frage zu der Funktion "_BuildInZIP".


    Kann man beim Entpacken die Dateinamen (also die entpackt werden sollen) auslesen.
    Ich möchte deine tolle Funktion gerne nutzen. Aber ich möchte auch im Script "sehen" was ich da auspacke.


    Wie kann man das machen?


    Gruß Schumi

  • Kann man beim Entpacken die Dateinamen (also die entpackt werden sollen) auslesen.

    Können kann man sicher :D.
    Das ZIP-Dateiformat hat einen strukturierten Aufbau und enthält ein "Inhaltsverzeichnis".
    Zitat:
    "Nach der letzten Datei steht ein weiteres Kennzeichen, das aus den vier Byte "PK12" als CentralFileHeaderSign besteht.
    Dieses leitet den Abschnitt der zentralen Dateikennungen ein. Hier stehen in dichter Folge im Sinne eines Directory noch einmal alle im Archiv enthaltenen Dateinamen nebst beschreibenden Datenangaben."
    Die ZIP binär einlesen, den Einstiegspunkt für die Auflistung suchen und auslesen.
    Kannst dich gerne dran versuchen, ich habe vorerst nicht die Muße dazu.