Electron - проблема при создании файла, ошибка «EROFS: файловая система только для чтения» - PullRequest
0 голосов
/ 27 марта 2020

Ну, я работаю над определенным приложением, которое улучшит работу в компании. Для этого мне нужно будет создать, сохранить и прочитать файл без диалогового окна.

Я создал этот код с помощью документации и Inte rnet:

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 (с использованием электронного компоновщика) в консоли появляется ошибка: «Произошла проблема с записью данных!». После отображения содержания ошибки появляется: Ошибка: EROFS: файловая система только для чтения, откройте «appdata. json».

Я проверил разрешения, я проверил в других местах - все так же :( Я искал для решения на net, но, к сожалению, ничего не решило проблему.

Кто-нибудь сталкивался с такой проблемой?

1 Ответ

0 голосов
/ 27 марта 2020

После сборки. Ресурс будет упакован в файл 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();
        }
    });
}
...