Zippen mit FSO und Javascript

gianfranco0104

Erfahrenes Mitglied
Frage, ich habe hier eine Möglichkeit, Lokal (Seite bleibt auch Lokal), eine ZIP Datei aus einem Ordner zu erzeugen : http://code.google.com/p/jsxt/source/browse/trunk/js/win32/ZipFile.js?r=460

allerdings habe ich Probleme die Funktion auszuführen, mit

HTML:
<a href="#"onClick="ZipFile();">Save to ZIP</a>

wird es wohl nicht klappen auch wenn ich folgendes in eine Function packe und aufrufe klappt es nicht :

Javascript:
var zip =newZipFile();
zip.addFiles("C:\\cnc\USER\projdata");
zip.save("C:\\cnc\USER\test.zip",{
overwrite:true,});

Ich steige nicht dahinter, wie ich das machen soll. Kann mir jemand diesbezüglich etwas unter die arme greifen?
Danke vorab.
 
Gibt der Browser eine Fehlermeldung zurück?

Vielleicht setzt das Script auch eine oder mehrere JS-Dateien aus dem übergeordneten win32-Verzeichnis voraus, oder es wird derzeit noch nicht vom Browser unterstützt, wie im Quervergleich http://fsojs.com/

fsojs.com hat gesagt.:
This browser does not support the FileSystem API

...

Support

As of March 2014, FSO.js is supported by Google Chrome

FSO.js is not currently supported by IE, Mozilla, or Safari.

Stay tuned as the W3C FileSystem specification reaches completion!
 
@SpiceLab , nein gibt keine Fehlermeldung aus. Read und Write Vorgänge mit FSO mache ich bereits. Ich habe gedacht, dass ich eventuell was falsch mache. In dem Link gibt er ja (im auskommentierten Bereich) ein Beispiel, den habe ich oben ja abgebildet. Allerdings kommt da auch nichts bei rum. auch wenn ich diesen selbst in eine Funktion setze oder mit in die Hauptfunktion einbaue.
 
Ich habe mir den Code von Google noch mal angeschaut,
du musst folgenden Funktionsaufruf machen:
Javascript:
ZipFile.create("Name.Zip", [Dateiliste], {
  overwrite: true
});
Den Rest macht das ZipFile.js
 
Hi, also schreibe ich eigentlich
Javascript:
function packProject() {
ZipFile.create("C:\\cnc\USER\test.zip", [Dateiliste], {
    overwrite: true
    });
}

Aber was steht in Dateiliste? Pfad des Ordners welches die Dateien beinhaltet?
 
Jetzt habe ich es wie folgt probiert,
Javascript:
function packProject() {
ZipFile.proj = ("C:\\cnc\USER\projdata");
ZipFile.create("C:\\cnc\USER\test.zip", [ZipFile.proj], {
    overwrite: true
    });
}

erhalte aber dann eine Fehlermeldung im Debugger bei der Zeile mit der var:
var zipFile = fso.CreateTextFile(filename, !! options.overwrite, 0);
"Ungültige(r) Dateiname oder -nummer."

also, insgesamt schaut mein Code jetzt so aus (habe hier das packProj nochmals geändert):

Javascript:
/*
* @example

var zip = new ZipFile();
zip.addFiles("C:\\cnc\USER\projdata");
zip.save("C:\\cnc\USER\test.zip", {
overwrite: true,
});
*/
function ZipFile()
{
        var self = this;
        var files = [];
        self.addFiles = function()
        {
                for (var i = 0; i < arguments.length; i++) {
                        files.push(arguments[i]);
                }
        };

        self.save = function(filename, options)
        {
                options = options || {};
                // Create the empty zip-file (it is created as an ASCII file)
                var fso = new ActiveXObject("Scripting.FileSystemObject");
                var zipFile = fso.CreateTextFile(filename, !! options.overwrite, 0);
                zipFile.Write('PK' + String.fromCharCode(5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); // 18 zeros
                zipFile.Close();

                // Opens the empty archive file and a Shell folder
                var shell = new ActiveXObject("Shell.Application");
                var zipFolder = shell.NameSpace(fso.GetFile(filename).Path);
                if ( zipFolder == null ) {
                        if ( typeof options.onerror == 'function' ) {
                                options.onerror(filename);
                        }
                        if ( fso.FileExists(filename) ) {
                                fso.DeleteFile(filename, true);
                        }
                        throw new TypeError();
                }

                // Copy files to an archive file
                var o = Number(options.option) || 0;
                for (var i = 0; i < files.length; i++) {
                        zipFolder.CopyHere(fso.GetFile(files[i]).Path, o);
                }
                // Sleep to be sure that the zip file was created completely
                var t = ( ! options.timeout || Number(options.timeout) < 500 )
                        ? 500
                        : options.timeout;
                WScript.Sleep(t);
        };
};
ZipFile.create = function(filename, fileList, options)
{
        var zip = new ZipFile();
        zip.addFiles.apply(this, fileList);
        zip.save(filename, options);
};

function packProject() {
ZipFile.addFiles = ("C:\\cnc\USER\projdata");
ZipFile.create("C:\\cnc\USER\test.zip", [ZipFile.addFiles], {
    overwrite: true
    });
}
und der aufruf ist mit einem oncCick über HTML auf die Function "packProject()".
Habe noch etwas herumgeschraubt., aber immer das gleiche. Was mach ich falsch? Ich glaube ich sehe den Wald vor lauter Bäumen nicht mehr.
 
Zuletzt bearbeitet:
Probier mal folgendes:
Javascript:
function packProject() {
Files = ("C:\\cnc\USER\projdata");
ZipFile.create("C:\\cnc\USER\test.zip", Files, {
    overwrite: true
    });
}
 
erstmal, echt Klasse, dass du mir so intensiv hilfst :)
leider habe ich nun folgendes im Debugger für "zip.addFiles.apply(this, fileList);" -> Function.prototype.apply: Das Argument ist kein Objekt.
 
Zurück