2017-06-08 21 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'函数,它的工作很好 –

相关问题