2017-07-13 2 views
0

私の目標は、NodeJSのファイルシステムを使用して.asarファイルをコピーすることです。ファイルパスがあり、.asarファイルを別の宛先にコピーする必要があります。ファイルパスのNodeJSファイルシステム(fs)を使用したasarファイルのコピー

例:

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

私は別のディレクトリにこのファイル(アーカイブ)をコピーする必要があります。

これはウォーク&コピー機能でコピーしましたが、filename.asarという名前の実際のファイルの代わりにfilename.asarという名前のディレクトリが作成されました。この機能は他のすべてのファイルとフォルダで正しく動作しているようです.asarアーカイブの場合)。読み取りおよび書き込みのストリームを使用してアーカイブのコピー:私は

1を試してみましたが、何

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')); 

これはエラーを与えてしまった:Error #1

それは、このファイルが見つからないと言うが、私はパスが.asarファイルに私をリードしていたソースをコピーし、あなたを確保することができます。

2:パッケージを作成するためのasar要件の使用。

var fs = require('fs'); 
var asar = require('asar'); 

asar.createPackage('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar', 'C:/Users/redacted/Desktop/test.asar', function() { 
    console.log('done.'); 
}) 

この機能は正しい「完了」メッセージを記録しますが、コピーがうまくいかなかったようです。コピー先のディレクトリに新しいファイルやフォルダは表示されません。

ありがとうございます。

+0

Windowsディレクトリパスの区切り文字は '\'ですか。すべての '/'を '\\ 'で置き換えてみてください。あるいは 'fs.existsSync(yourPath)'を使ってNodeが実際にそれを見ることができるようにしてください。 'fs.readdir'を使ってフォルダのファイルをリストすることさえできます。 – Seblor

+0

ファイルパスにスペースがありませんか? – paulsm4

+0

パス文字列内のすべてのスペースの前に\をバックスラッシュします。私も\ /(スペースの他に\)と一緒にすべてを置き換えようとしましたが、これらのソリューションの両方が同じエラーを出すようになりました。 'fs.existsSync(" path ")を使うと、ソースパスを"パス "として使うときに' true'を返します。アーカイブ全体をコピーするための他の提案はありますか? –

答えて

0

私がこれを成功させる方法は、.asarファイルの名前を変更してコピーした後に名前を変更することでした。ここで.asarファイルをコピーするための最終的なソースです:

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

NODEJSモジュールの "path"を使用できます。

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

これは質問に答えません。問題は** .asarアーカイブをコピーする方法を尋ねることです** **私はすでに適切なファイルパスを作成する方法を知っています。私の質問を完全に読んでください。 –

+0

uh..OK、私は同じ問題があると思います。 – TonyY

+0

更新したこのコードを試してみてください! – TonyY

関連する問題