2017-07-03 111 views
1

這是我目前的文件夾結構before packaging WRM_80 ..是我下載的文件夾。如何下載文件在應用程序文件夾內?[包裝後]

我的代碼中index.js這兩行下載和在我的電子窗口

fs.createReadStream('./Report.zip').pipe(unzip.Extract({ path: './'+folderName })); 
LoginWindow.loadURL(`file://${__dirname}./`+folderName+`/t01s01q01.html`); 

顯示HTML開發模式的工作在我的index.js存在相同的文件夾中下載的罰款,文件。但打包後,應用程序文件正在下載應用程序文件夾外。打包的文件夾結構在WRM_80下面給出。是我下載的文件夾。 after packaging

這就是爲什麼我無法將下載的文件加載到窗口中的原因。我該如何下載應用程序文件夾中的文件?如果這是不可能的,我如何從資源\應用程序位置加載外部文件?

+0

我看不出差別在圖片 – Zeokav

+0

@Zeokav請現在看到 –

回答

0

通過引用該目錄作爲./folder_name你基本上是告訴應用程序下載到working directory。在這種情況下,工作目錄是程序所在的文件夾。在開發和使用electron命令時,工作目錄是應用程序的根目錄。但是,一旦安裝並運行爲.exe,工作目錄將更改爲可執行文件的位置。

要解決此問題,請不要使用當前工作目錄。請使用用戶/應用程序數據文件夾來存儲此信息。它不僅是開發和部署中的一致位置,而且它也是存儲應用程序數據的語義上正確的位置。

在電子,你可以得到的路徑,Application Data文件夾與您的應用程序:

const {app} = require('electron'); 
app.getPath('userData') 

所以,你的代碼應該是這個樣子:

var userData = app.getPath('userData'); 
fs.createReadStream(`${userData}/Report.zip`).pipe(unzip.Extract({ path: `${userData}/${folderName}` })); 
LoginWindow.loadURL(`file://${userData}/${folderName}/t01s01q01.html`); 
+1

謝謝你很多。這解決了我的問題。我也嘗試以另一種方式解決它,它也工作正常。 (path.resolve('$ {__ dirname}',「Report.zip」))。pipe(unzip.Extract({path:path.resolve('$ {__ dirname}',folderName)})); LoginWindow.loadURL(path.resolve('$ {__目錄名}',FOLDERNAME, 't01s01q01.html')); –

+0

正確的你可以使用'path.resolve'來使它工作,但是使用用戶數據文件夾是最好的做法。除了安裝位置的核心應用程序之外,它爲您的應用程序下載/使用的「額外」數據提供了可靠的位置。 – AlienHoboken

+0

再次感謝:)它會有所幫助。我在製作win安裝程序後遇到了另一個問題,它在節點模塊文件夾中附帶了Trojan gen 2病毒。我必須做一個安裝程序,並把它交給客戶端,我在噩夢兄弟,我如何遠離安裝程序文件的特洛伊第2代? –

相關問題