2017-07-13 92 views
0

我的目標是使用NodeJS的文件系統複製.asar文件。我有一個文件路徑,需要將.asar文件複製到另一個目標。文件路徑使用NodeJS文件系統複製asar文件(fs)

例子:

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

恩..我認爲這有同樣的問題。 – TonyY

+0

試試這個我更新的代碼! – TonyY