2017-02-27 37 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 ...

其中media.js,19n被提及的是代码中的const file = fs.createWriteStream( $ {dir}/$ {name} );行。

我已经尝试了大约十几个其他类似的stackoverflow答案提供的解决方案,但没有解决这个问题。

这是怎么回事?

感谢。

回答

1

构建的Electron应用程序使用Asar格式。 Asar是一种档案格式(它实际上只是一个大文件),但在Electron中,您可以像阅读标准目录一样读取它。

我推测(尽管我没有看到它有明确的记录),它不可能用fs函数写入Asar。无论如何,几乎肯定会有更合适的位置来写入数据。

尝试写入不同的路径。 Electron使用app.getPath(name)提供了许多有用的路径,例如,您可以写入userData目录,该目录保存应用程序的配置文件。

相关问题