Zip file auspacken

gianfranco0104

Erfahrenes Mitglied
Ich habe hier ein Zipper Tool mit dem ich einen Ordner einpacken kann, und dann aus dem Arbeitsordner in einen Projektordner verschieben. Klappt super.
Beim wieder öffnen kann ich die zip wieder in den Arbeitsordner schieben aber nicht mehr auspacken.
Hier der EINPACK-Code:

Erst das Allgemeine Zipper-Funktionstool:
Javascript:
function ZipFile()
{
        if ( arguments.length == 0 ) {
                return;
        }
        this.open.apply(this, arguments);
};

(function()
{
var fso = new ActiveXObject('Scripting.FileSystemObject');
var shellApp = new ActiveXObject("Shell.Application");

ZipFile.prototype.open = function(name, create, overwrite)
{
        if ( create ) {
                var zipFile = fso.CreateTextFile(name, !! overwrite, 0);
                zipFile.Write('PK\05\06' + new Array(19).join('\0')); // 18 zeros
                zipFile.Close();
        }
        this.name = fso.GetFile(name).Path;
        this.file = shellApp.NameSpace(this.name);
};

ZipFile.prototype.flush = function(timeout)
{
        timeout = Math.max(Number(timeout) || 0, 100);
        WScript.Sleep(timeout);
};
ZipFile.prototype.forEach = function(func)
{
        if ( typeof func != 'function' ) {
                throw new TypeError();
        }

        var arcfile = this.file;
        var items = arcfile.Items();

        for (var e = new Enumerator(items); ! e.atEnd(); e.moveNext()) {
                var folderItem = e.item();
                func(folderItem, arcfile);
        }
};
ZipFile.prototype.forInput = function(input, func)
{
        if ( typeof func != 'function' ) {
                throw new TypeError();
        }

        var arcfile = this.file;

        if ( typeof input == 'string' ) {
                input = [input];
        }

        for (var i = 0; i < input.length; i++) {
                var p = input[i];
                if ( ! p ) {
                        continue;
                }

                var folderItem = null;
                if ( fso.FileExists(p) ) {
                        folderItem = fso.GetFile(p);
                } else if ( fso.FolderExists(p) ) {
                        folderItem = fso.GetFolder(p);
                }
                func(folderItem, arcfile);
        }
};
})();

Dann die Funktion zum Einpacken und schieben:
Javascript:
var projFileName = ('testx')// Dateiname

function packProject() {
var zipfile = new ZipFile();
zipfile.open("C:\\cnc\\USER\\" + projFileName + ".zip", true, true); //TempZip erstellen in:
zipfile.forInput(
    [
        "C:\\cnc\\USER\\projdata"

        // hier können weitere Folder rein
    ],
    function(folderItem, arcfile)
    {
        arcfile.CopyHere(folderItem.Path, 0);
        setTimeout(function(){
          // Projekt Suffix von .zip in .cm5 umbenennen
          var renFile = new ActiveXObject("Scripting.FileSystemObject");
          var shell = new ActiveXObject("WScript.Shell");
          pathToMyDocuments = shell.SpecialFolders('MyDocuments');
          // Erzeuge .CM5-File und in "BENUTZERNAME\Dokumente\CM5Projects" verschieben
          renFile.CopyFile("C:\\cnc\\USER\\" + projFileName + ".zip", pathToMyDocuments + "\\CM5Projects\\" + projFileName + ".cm5", 1);  // 1=overwrite
          renFile.DeleteFile("C:\\cnc\\USER\\" + projFileName + ".zip", true);  //Nach verschieben tempZip löschen
          renFile = null;  
        },5000);
    });
}

und mein vergeblicher Versuch das wieder auszupacken (hinein in "projdata")

Javascript:
var OpenprojFileName = ('testx')// Dateiname
function openProject() {
    setTimeout(function(){
      // Projekt Suffix von .cm5 in .zip umbenennen
      var renFile = new ActiveXObject("Scripting.FileSystemObject");
      shell = new ActiveXObject("WScript.Shell");
      pathToMyDocuments = shell.SpecialFolders('MyDocuments');
      // Erzeuge .ZIP-File und in "CNC\USER\" verschieben
      renFile.CopyFile(pathToMyDocuments + "\\CM5Projects\\"  + OpenprojFileName + ".cm5", "C:\\cnc\\USER\\" + OpenprojFileName + ".zip", 1); //1= overwrite
      renFile = null;
    },5000);
  
  
/*    //auspacken klappt noch nicht richtig...
var zipfile = new ZipFile();
zipfile.forInput(
    [
        "C:\\cnc\\USER\\projdata"

        // hier können weitere Folder rein
    ],   
zipfile.forEach(function(folderItem, arcfile){
        if ( ! folderItem.IsFolder ) {
                return;
        }
        var items = folderItem.GetFolder.Items();
        var len = items.Count;
        for (var i = 0; i < len; i++) {
                var g = items.Item(i);
                arguments.callee(g, arcfile);
        }
    }));
    */
    //nach dem Auspacken TempZip Datei löschen...
}
 
Habe eine Lösung ohne das Zipper Funktionstool (obige codes mal vergessen) und den nehmen:
Javascript:
function unZip() {               
    var fileNameOpen = "testZip";
    var unzipdir = ["C:\\temp\\"];
    var zipfile = [unzipdir + fileNameOpen + ".zip"];
    var zip = null;
    var dst = null;
    var fso = new ActiveXObject('Scripting.FileSystemObject'),
        shell = new ActiveXObject('Shell.Application'),
        dst, zip;
   
    if (!fso.FolderExists(unzipdir)) {
        fso.CreateFolder(unzipdir);
    }
    dst = shell.NameSpace(fso.getFolder(unzipdir).Path);
    zip = shell.NameSpace(fso.getFile(zipfile).Path);
    if (fso.FileExists(zipfile)) {
        dst.CopyHere(zip.Items(), 4 + 16);
    }
}
 

Neue Beiträge

Zurück