web-dev-qa-db-ja.com

Electronで外部ファイルを開く

Electronアプリを実行していますが、これまでのところうまく機能しています。コンテキストについては、バックグラウンドタスクを実行するGo-langバイナリである外部ファイルを実行/開く必要があります。基本的には、バックエンドとして機能し、Electronアプリが消費するAPIを公開します。

これまでのところ、これは私が得るものです:

  • child_process を使用して「node way」でファイルを開こうとしましたが、おそらくパスの問題が原因でサンプルのtxtファイルを開くことができません。

  • Electron APIは open-file イベントを公開しますが、ドキュメント/例が不足しており、有用かどうかわかりません。

それでおしまい。 Electronで外部ファイルを開く方法は?

29
Javier Cadiz

勉強したいAPIがいくつかあり、どれが役立つかを確認できます。

fs

fs モジュールを使用すると、直接読み取りおよび書き込み用にファイルを開くことができます。

var fs = require('fs');
fs.readFile(p, 'utf8', function (err, data) {
  if (err) return console.log(err);
  // data is the contents of the text file we just read
});

パス

path モジュールを使用すると、プラットフォームに依存しない方法でパスを構築および解析できます。

var path = require('path');
var p = path.join(__dirname, '..', 'game.config');

シェル

Shell apiは、特定のパスでファイルをシェル実行するために使用できる電子専用APIで、OSのデフォルトアプリケーションを使用してファイルを開きます。

const {Shell} = require('electron');
// Open a local file in the default app
Shell.openItem('c:\\example.txt');

// Open a URL in the default way
Shell.openExternal('https://github.com');

child_process

Golangバイナリが実行可能ファイルであると仮定すると、 child_process.spawn 呼び出して通信します。これはノードAPIです。

var path = require('path');
var spawn = require('child_process').spawn;

var child = spawn(path.join(__dirname, '..', 'mygoap.exe'), ['game.config', '--debug']);
// attach events, etc.

アドオン

ご使用のgolangバイナリが実行可能ファイルではない場合、 ネイティブアドオン ラッパーを作成する必要があります。

58
justin.m.chase

Electronでは、nodejsパッケージを使用できます。

言い換えれば、ノードにいるかのようにノードパッケージをインポートします。例:

var fs = require('fs');

Golangバイナリを実行するには、 child_process モジュールを使用できます。ドキュメントは徹底的です。

Edit:パスの違いを解決する必要があります。 open-file eventは、ウィンドウによってトリガーされるクライアント側のイベントです。ここで欲しいものではありません。

0
thepanuto