2017-07-13 3 views
0

Mein Ziel ist es, eine .asar-Datei mit dem Dateisystem von NodeJS zu kopieren. Ich habe einen Dateipfad und muss die .asar-Datei an ein anderes Ziel kopieren.Asar-Datei mit dem NodeJS-Dateisystem (fs) kopieren

Beispiel Dateipfad:

C:/Users/redacted/Documents/ExampleElectronApp/example.asar 

Ich brauche diese Datei (Archiv) in ein anderes Verzeichnis zu kopieren.

Früher kopierte ich dies mit einer Walk-and-Copy-Funktion, aber es endete ein Verzeichnis namens filename.asar anstelle einer tatsächlichen Datei namens filename.asar Diese Funktion scheint auf alle anderen Dateien und Ordner korrekt zu funktionieren (außer für .asar Archive).

Was ich versucht habe

1: Kopieren des Archiv Streams mit lesen und schreiben.

var fs = require('fs'); 
fs.createReadStream('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar').pipe(fs.createWriteStream('C:/Users/redacted/Desktop/test.asar')); 

Dieser landete einen Fehler geben: Error #1

Es heißt diese Datei nicht gefunden wird, aber ich kann Ihnen versichern, den Quellpfad kopiert mich auf die .asar Datei führt.

2: Verwenden der ASAR-Anforderung zum Erstellen eines Pakets.

Während diese Funktion die richtige 'Done' Nachricht protokolliert, scheint es, dass die Kopie nicht erfolgreich war. Im Zielverzeichnis werden keine neuen Dateien oder Ordner angezeigt.

Vielen Dank im Voraus.

+0

Ist nicht Windows-Verzeichnis Pfad Trennzeichen ein '\'? Versuchen Sie, alle '/' durch '\\' zu ersetzen. Oder verwenden Sie 'fs.existsSync (yourPath)', um sicher zu gehen, dass der Knoten es tatsächlich sehen kann. Sie können sogar 'fs.readdir' verwenden, um die Dateien eines Ordners aufzulisten. – Seblor

+0

Sie haben keine Leerzeichen in Ihrem Dateipfad, oder? – paulsm4

+0

Ich habe \ vor allen Leerzeichen in der Zeichenfolge des Pfads zurückgelas- sen. Ich habe auch versucht, alle/mit \\ (neben dem Leerzeichen \) zu ersetzen, und beide dieser Lösungen gaben den gleichen Fehler. Wenn 'fs.existsSync (" path ") verwendet wird, gibt' true' zurück, wenn ich den Quellpfad als "Pfad" verwende. Irgendwelche anderen Vorschläge, um das gesamte Archiv zu kopieren? –

Antwort

0

Der Weg endete ich Erfolg bis Dies wurde durch die .asar Dateien dann Umbenennung sie wieder umbenennen, nachdem ich sie kopiert. Hier ist meine letzte Quelle zum Kopieren von .asar-Dateien:

var filePathSource = path.join(__dirname, 'default_app.asar') 
var filePathTarget = path.join(__dirname, 'test.txt') 

var filePathSourceNew = filePathSource.slice(0, -5) + ".txt"; 
console.log(filePathSourceNew); 

fs.rename(filePathSource, filePathSourceNew, function(err) { 
    if (err) { 
     console.log('ERROR: ' + err); 
    } else { 
     var stream = fs.createReadStream(filePathSourceNew).pipe(fs.createWriteStream(filePathTarget)); 
     stream.on('finish', function() { 
     fs.rename(filePathSourceNew, filePathSource, function(err) { 
      if (err) { 
       console.log('ERROR: ' + err); 
      } else { 
       fs.rename(filePathTarget, filePathTarget.slice(0, -4) + ".asar", function(err) { 
        if (err) { 
        console.log('ERROR: ' + err); 
        } else { 
        console.log("Complete Asar Copy"); 
        } 
       }); 
      } 
     }); 
     }); 
    } 
}); 
0

Sie können "path" des NODEJS-Moduls verwenden.

const path = require('path') 
filePathSource = path.join(__dirname, 'a', 'b', 'c', 'source.asar') 
filePathTarget = path.join(__dirname, 'a', 'b', 'c', 'target.asar')  
fs.createReadStream(filePathSource).pipe(fs.createWriteStream(filePathTarget)); 
+0

Dies beantwortet die Frage nicht. Die Frage lautet: ** Wie man ein .asar-Archiv kopiert. ** Ich weiß bereits, wie man richtige Dateipfade erstellt. Bitte stellen Sie sicher, dass Sie meine Frage vollständig gelesen haben. –

+0

uh..OK, ich denke, das hat das gleiche Problem. – TonyY

+0

Probieren Sie diesen Code, den ich aktualisiert habe! – TonyY