Zippen mit FSO und Javascript

Die Pfade sind anscheinend falsch:
Javascript:
"C:\\cnc\USER\projdata"
=> "C:\\cnc\\USER\\projdata"

"C:\\cnc\USER\test.zip"
=> "C:\\cnc\\USER\\test.zip"
 
@ComFreek . scheint nicht so, alle anderen FSO habe ich auch mit dieser Angabe gemacht. Dennoch hab ich deinen Vorschlag getestet - leider kommt auch hier der selbe Fehler >> zip.addFiles.apply(this, fileList);" -> Function.prototype.apply: Das Argument ist kein Objekt.
 
Du hättest einen Fehler bemerkt, wenn du beispielsweise "\t" in deinem Pfad gehabt hättest. Dann würde nämlich "\t" durch ein Tabzeichen ersetzt werden.

Ansonsten könnte ich mir noch vorstellen, dass das "this" in "zip.addFiles.apply(this...)" nicht gesetzt ist. Woher kommt denn "this"? Du rufst "ZipFile.create" ohne Kontext (~ this) auf.
Obiges ist falsch. Siehe unteren Beitrag: http://www.tutorials.de/threads/zippen-mit-fso-und-javascript.399061/#post-2060745
 
Zuletzt bearbeitet:
Der code ist von Google. habe so nichts daran geändert. ich versuche dem Tipp von Ikosaeder nach zugehen und habe die Funktion "packProject() " dazu genommen. Leider eben ohne Erfolg.
 
Der zweite Absatz meines Beitrags #13 ist falsch, siehe MDN für eine Liste, wann wie der Kontext einer Funktion gesetzt wird.

Kannst du mal deinen aktuellen Code zeigen (der Ausschnitt deiner hinzugefügten Funktion reicht)?

Laut Kommentaren in ZipFile.js sollte man ein Array übergeben.
Javascript:
function packProject() {
  Files = ("C:\\cnc\USER\projdata");
  ZipFile.create("C:\\cnc\USER\test.zip", Files, {
    overwrite: true
  });
}

Allerdings hat Ikosaeder wahrscheinlich die falschen Klammerntasten in Zeile 2 erwischt ;)
Es stammte doch nicht aus Ikosaeders Beitrag :)

Wie auch immer, es müssen eckige, nicht runde Klammern sein. Wo ich schon beim Code bin, habe ich noch Files in eine lokale Variable verwandelt und die im vorhergehenden Beitrag erwähnten fehlenden Backslashes (\) hinzugefügt:
Javascript:
function packProject() {
  var files = ["C:\\cnc\\USER\\projdata"];
  ZipFile.create("C:\\cnc\\USER\\test.zip", files, {
    overwrite: true
  });
}

PS: Der Code ist natürlich nicht von Google. Google stellt nur eine Plattform bereit, auf der beliebige Personen Opensource-Projekte hochladen dürfen.
 
Das Ist nun der Aktuelle, (am besten doch nochmal komplett) Code:
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() {
  var files = ["C:\\cnc\\USER\\projdata"];
  ZipFile.create("C:\\cnc\\USER\\test.zip", files, {
    overwrite: true
  });
}

AKtuell erhalte ich jetzt die Fehlermeldung: zu "zipFolder.CopyHere(fso.GetFile(files).Path, o);" >> Die Datei wurde nicht gefunden.
Kann es sein dass er den Pfad über "zip.addFiles ()" haben will?
 
in dem Example was im COde mitgegeben wird vergeben die den Pfad (Ordnerinhalt welcher gezippt werden soll) mit 'zip.addFiles'. daher war die Frage, ob die ZipFile.js bei der Pfadangabe der zu zippenden Dateien über 'zip.addFiles("C:\\cnc\USER\projdata");' laufen soll?
 
ZipFile.create enthält den Aufruf von zip.addFiles.
Vielleicht ist der Pfad nicht richtig geschrieben und er findet ihn deshalb nicht.
Benutz doch mal console.log() um dir die Wert auszugeben die er tatsächlich benutzt.
Z.B. vor Zeile 32
Javascript:
console.log(filename);
und vor Zeile 45
Javascript:
console.log(files[i]);
 
Zurück