electron 电子-创建文件时出现问题,错误“EROFS:只读文件系统”

cgfeq70w  于 2022-12-08  发布在  Electron
关注(0)|答案(1)|浏览(252)

嗯,我正在开发一个可以改善公司工作的应用程序。为此,我需要创建、保存和读取一个没有对话框的文件。
我在文档和互联网的帮助下创建了以下代码:

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),控制台中会出现错误:“写入数据时出现问题!"。显示错误内容后出现:错误:EROFS:只读文件系统,请打开'appdata.json'。
我检查了权限,我检查了其他位置-仍然一样:(我在网上寻找解决方案,但不幸的是没有解决问题。
有人遇到过这样的问题吗?

ctehm74n

ctehm74n1#

编译后,资源将被打包到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();
        }
    });
}

相关问题