2017-02-27 3 views
0

ファイルシステムに電子アプリケーションでファイルをダウンロードしようとしています。メインスレッドでの私のコードは、次のようになります。電子アプリケーションcreateWriteStream ENOENTエラーを投げる

const dir = `${__dirname}/media`; 
if (!fs.existsSync(dir)){ 
    fs.mkdirSync(dir); 
} 

const file = fs.createWriteStream(`${dir}/${name}`); 
file.on("open", function() { 
    const request = http.get(url, function(response) { 
     response.pipe(file); 

     response.on('end', function() { 
      file.close(); 
      ... 
     }); 
    }); 

    request.on('error', function(err) { 
     ... 
    }); 
}); 

electron .を使用して開発して実行している場合は、この作品しかし、私はelectron-builderでそれを構築した後、私は警告でエラーが発生します。

Uncaught Exception: Error: ENOENT, media/uploads_2016_02_BASF_Holistic_Program.jpg not found in /Users/nicholasstephan/Desktop/XXXXXXX/dist/Mac/XXXXXX.app/Contents/Resources/app.asar at notFoundError (ELECTRON_ASAR.js:109:19) at Object.module.(anonymous function) [as open] (ELECTRON_ASAR.js:209:16) at WriteStream.open (fs.js:1890:6) at new WriteStream (fs.js:1876:10) at Object.fs.createWriteStream (fs.js:1831:10) at next (/Users/nicholasstephan/Desktop/XXXXXXXX/dist/Mac/XXXXXXXX.app/Contents/Resources/app.asar/media.js:19:18) at /Users/nicholasstephan/Desktop/XXXXXXXX/dist/Mac/XXXXXXXX.app/Contents/Resources/app.asar/media.js:52:4 ...

コード中のconst file = fs.createWriteStream( $ {dir}/$ {name} );の行であることを指しているmedia.js、ln 19の場合、

私は約10ダースの他の同様のstackoverflow答えで提供されるソリューションを試しましたが、誰も問題を修正していません。

ここでは何が起こっていますか?

ありがとうございました。

答えて

1

内蔵電子アプリは、Asar形式を使用しています。 Asarはアーカイブ形式です(実際には1つの大きなファイルです)が、Electronでは標準のディレクトリのように読み込むことができます。

fs機能を持つAsarに書き込むことはできないと私は推測していますが、明確に文書化されていません。いずれにしても、データを書き込むための場所がほぼ確実です。

別のパスに書き込んでみてください。 Electronはapp.getPath(name)を使用していくつかの便利なパスを提供します。例えば、あなたのアプリケーションの設定ファイルを保持するuserDataディレクトリに書き込むことができます。

関連する問題