Electron - 创建文件时出现问题,错误 "EROFS: read-only file system"
Electron - problem creating file, error "EROFS: read-only file system"
嗯,我正在开发一款可以改善公司工作的应用程序。为此,我需要在没有对话框的情况下创建、保存和读取文件。
我在文档和 Internet 的帮助下创建了这段代码:
const electron = require('electron');
let fs = require('fs'), app = electron.remote;
let localData, fileName = "appdata.json";
function loadAppData() {
fs.readFile(fileName, (err, data) => {
if (err) {
console.log("There was a problem reading the data!");
// console.log(err);
} else {
console.log("Data loaded!");
localData = JSON.parse(data);
console.log(localData);
}
});
}
function saveAppData(content) {
content = JSON.stringify(content);
fs.writeFile(fileName, content, (err) => {
if (err) {
console.log("There was a problem saving data!");
// console.log(err);
} else {
console.log("Data saved correctly!");
loadAppData();
}
});
}
function initappData() {
if (fs.existsSync(fileName)) {
console.log("File detected, loading");
loadAppData();
} else {
let defData = {
"patients": [],
"actions": [],
"visits": []
};
console.log("No file! I create! Saving! Loading!");
saveAppData(defData);
}
}
initappData();
我有一个问题,因为如果脚本在本地版本上运行,在 MacOS 上构建应用程序(使用 electron-builder)后,控制台中会出现错误:“写入数据时出现问题!”。
显示错误内容后出现:Error: EROFS: read-only file system, open 'appdata.json'.
我检查了权限,我检查了其他位置 - 还是一样 :(
我一直在网上寻找解决方案,但不幸的是没有解决问题。
有没有人遇到过这样的问题?
构建后。资源将被打包到 asar
文件中
但这只是read-only
。您无法修改 asar
.
内的文件
如果我是你。我要将 appData.json
存储在 Application Support
。我认为这是应用程序的流行配置。
你可以通过这个获取Application Data
路径。
function getAppDataPath() {
switch (process.platform) {
case "darwin": {
return path.join(process.env.HOME, "Library", "Application Support", "Your app name");
}
case "win32": {
return path.join(process.env.APPDATA, "Your app name");
}
case "linux": {
return path.join(process.env.HOME, ".Your app name");
}
default: {
console.log("Unsupported platform!");
process.exit(1);
}
}
}
function saveAppData(content) {
const appDatatDirPath = getAppDataPath();
// Create appDataDir if not exist
if (!fs.existsSync(appDatatDirPath)) {
fs.mkdirSync(appDatatDirPath);
}
const appDataFilePath = path.join(appDatatDirPath, 'appData.json');
content = JSON.stringify(content);
fs.writeFile(appDataFilePath, content, (err) => {
if (err) {
console.log("There was a problem saving data!");
// console.log(err);
} else {
console.log("Data saved correctly!");
loadAppData();
}
});
}
嗯,我正在开发一款可以改善公司工作的应用程序。为此,我需要在没有对话框的情况下创建、保存和读取文件。
我在文档和 Internet 的帮助下创建了这段代码:
const electron = require('electron');
let fs = require('fs'), app = electron.remote;
let localData, fileName = "appdata.json";
function loadAppData() {
fs.readFile(fileName, (err, data) => {
if (err) {
console.log("There was a problem reading the data!");
// console.log(err);
} else {
console.log("Data loaded!");
localData = JSON.parse(data);
console.log(localData);
}
});
}
function saveAppData(content) {
content = JSON.stringify(content);
fs.writeFile(fileName, content, (err) => {
if (err) {
console.log("There was a problem saving data!");
// console.log(err);
} else {
console.log("Data saved correctly!");
loadAppData();
}
});
}
function initappData() {
if (fs.existsSync(fileName)) {
console.log("File detected, loading");
loadAppData();
} else {
let defData = {
"patients": [],
"actions": [],
"visits": []
};
console.log("No file! I create! Saving! Loading!");
saveAppData(defData);
}
}
initappData();
我有一个问题,因为如果脚本在本地版本上运行,在 MacOS 上构建应用程序(使用 electron-builder)后,控制台中会出现错误:“写入数据时出现问题!”。 显示错误内容后出现:Error: EROFS: read-only file system, open 'appdata.json'.
我检查了权限,我检查了其他位置 - 还是一样 :( 我一直在网上寻找解决方案,但不幸的是没有解决问题。
有没有人遇到过这样的问题?
构建后。资源将被打包到 asar
文件中
但这只是read-only
。您无法修改 asar
.
如果我是你。我要将 appData.json
存储在 Application Support
。我认为这是应用程序的流行配置。
你可以通过这个获取Application Data
路径。
function getAppDataPath() {
switch (process.platform) {
case "darwin": {
return path.join(process.env.HOME, "Library", "Application Support", "Your app name");
}
case "win32": {
return path.join(process.env.APPDATA, "Your app name");
}
case "linux": {
return path.join(process.env.HOME, ".Your app name");
}
default: {
console.log("Unsupported platform!");
process.exit(1);
}
}
}
function saveAppData(content) {
const appDatatDirPath = getAppDataPath();
// Create appDataDir if not exist
if (!fs.existsSync(appDatatDirPath)) {
fs.mkdirSync(appDatatDirPath);
}
const appDataFilePath = path.join(appDatatDirPath, 'appData.json');
content = JSON.stringify(content);
fs.writeFile(appDataFilePath, content, (err) => {
if (err) {
console.log("There was a problem saving data!");
// console.log(err);
} else {
console.log("Data saved correctly!");
loadAppData();
}
});
}