2017-06-08 47 views
0

我有一個電子應用程序,也可以在同一個目錄中的文件上運行。這些都不是文件的用戶選擇,或電子應用程序內部的文件捆綁在一起,但我需要引用它們我的電子應用程序在哪裏

例如:

  • /Users/test/Documents/myapp.app
  • /用戶/測試/文檔/ example.zip

我需要知道該應用程序的位置,如:

  • /用戶/測試/文檔

但是相反,當test.app是跑我得到:

  • /Users/test/Documents/myapp.app/Contents/Resources/app/

當它嘗試訪問/Users/test/Documents/myapp.app/Contents/Resources/app/test.zip或者如果我使用相對路徑/test.zip時導致錯誤。

如何在此場景中可靠地訪問example.zip?請注意,我無法將它與我的應用捆綁在一起,它被其他人放在那裏,所以移動它不是一種選擇,它是我期待的那個文件。

回答

1

我和一個朋友擡頭一看凌動是怎麼做的,來到了這個解決方案。

function getAppRoot() { 
    if (process.platform === 'win32') { 
    return path.join(app.getAppPath(), '/../../../'); 
    } else { 
    return path.join(app.getAppPath(), '/../../../../'); 
    } 
} 
+1

非常好的捕獲!剛剛救了我的額頭更多的桌子撞:) – TheTechy

-1

您可以使用fs.readdir函數列出特定目錄(可能是您的應用程序或任何位置)中的所有文件。您可以從代碼中創建一個目錄來放置所有新文件,這樣您可以更輕鬆地將它們正確列出並進行處理。

const testFolder = './tests/'; 
const fs   = require('fs'); 

fs.readdir(testFolder, (err, files) => { 
    files.forEach(file => { 
     console.log(file); 
    }); 
}); 

How do you get a list of the names of all files present in a directory in Node.js?

+0

但我不知道我在哪個文件夾,這是我想要解決的問題,我的.app/.exe應用程序位於何處? –

0

我覺得無論是app.getPath('exe')process.execPath是你在找什麼。它們都給你當前使用的可執行文件的路徑。

編輯:看文檔的app.getPath()把所有的不同的文件夾的路徑(例如家中,應用程序數據,文件等)

+0

process.execPath給出了'...../test/test.app/Contents/Resources/app /'文件夾,就像'app一樣。的getPath( 'EXE')'。如果我在我的項目文件夾中運行'electron .',它會給出.... ..../test /'這是我想要的,但我不想要這個'test.app/Contents/Resources/app 'stuff –

+0

app.getPath('exe')在Windows上以.exe文件名返回可執行文件,並且'process.execPath'未定義 –

+0

我想你必須解決該輸出並使用[path.join]( https://nodejs.org/api/path.html#path_path_join_paths)來獲得你想要的。只有macOS具有稍微更深的應用程序結構,因此您可以檢查'process.platform =='darwin''並上傳目錄四次。例如。 'path.join(app.getPath('exe'),'..','..','..','..')'。這不是美麗的,但它的作品。 – RoyalBingBong

0

你在哪裏運行應用電子?如果它在「文檔」下運行(我假設Windows),則可以將文檔傳遞到app.getPath,如下所示:app.getPath('documents')

如果您從渲染過程調用此函數,則可能必須導入remote,並在渲染過程remote.app.getPath('documents');中執行以下操作。

electron doc將在解釋路徑選項你可以更好的傳遞

+0

它可能在任何地方,問題的目標是發現,如果我將test.app複製到文件夾X,如何從應用程序內部發現X? –

+0

因此,根據您的說法,您需要將Electron應用程序放置在ANY文件夾中,並且能夠訪問當前目錄中的文件?這個應用程序是否以可執行文件運行或者你只是將它作爲'npm run electron。'運行,因爲它是否會使用「捆綁/打包」應用程序訪問文件會產生重大影響。 –

+0

作爲一個可執行文件,我對package/bundle中的文件沒有興趣,請參閱我發佈的答案中的'getAppRoot'函數,它的工作很好 –

相關問題