电子应用程序 createWriteStream 抛出 ENOENT 错误
Electron app createWriteStream throwing ENOENT error
我正在尝试将文件下载到电子应用程序中的文件系统。我的代码在主线程中如下所示:
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
, ln 19, 被引用是代码中的 const file = fs.createWriteStream(
${dir}/${name});
行。
我已经尝试了十几个其他类似的 Whosebug 答案中提供的解决方案,但是 none 已经解决了问题。
这是怎么回事?
谢谢。
构建的 Electron 应用程序使用 Asar 格式。 Asar 是一种存档格式(它实际上只是一个大文件),但在 Electron 中你可以像读取标准目录一样从中读取它。
我推测(尽管我没有看到它的明确记录)不可能使用 fs
函数写入 Asar。无论如何,几乎肯定有更合适的位置来写入数据。
尝试写入不同的路径。 Electron 使用 app.getPath(name)
提供了许多有用的路径,因此您可以写入 userData
目录,该目录包含您的应用程序的配置文件。
我正在尝试将文件下载到电子应用程序中的文件系统。我的代码在主线程中如下所示:
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
, ln 19, 被引用是代码中的 const file = fs.createWriteStream(
${dir}/${name});
行。
我已经尝试了十几个其他类似的 Whosebug 答案中提供的解决方案,但是 none 已经解决了问题。
这是怎么回事?
谢谢。
构建的 Electron 应用程序使用 Asar 格式。 Asar 是一种存档格式(它实际上只是一个大文件),但在 Electron 中你可以像读取标准目录一样从中读取它。
我推测(尽管我没有看到它的明确记录)不可能使用 fs
函数写入 Asar。无论如何,几乎肯定有更合适的位置来写入数据。
尝试写入不同的路径。 Electron 使用 app.getPath(name)
提供了许多有用的路径,因此您可以写入 userData
目录,该目录包含您的应用程序的配置文件。