Как бы я сохранил состояние всех переменных в консольном приложении? - PullRequest
0 голосов
/ 26 февраля 2019

Для проекта, над которым я работаю, мне нужно сохранить состояние всех переменных в консольном приложении.

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

Возможно ли это, и если да, то как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Используйте свои проекты Settings для каждой переменной, а затем используйте Properties.Settings.Default.Save() всякий раз, когда вам нужно.

Щелкните правой кнопкой мыши свой проект в обозревателе решений> Настройки.

Создайте файл настроекпри необходимости создайте переменные.

Для использования: Properties.Settings.Default.VariableName1;

0 голосов
/ 26 февраля 2019

В зависимости от сценария.Я хотел бы создать сериализуемый класс, который содержит все данные для сериализации, а затем сериализовать класс в файл перед выходом из приложения.

Затем десериализовать файл (если существует) при запуске приложения.Класс должен быть помечен как Serializable.

[Serializable]
public class AppState
{
     public int Var1 { get; set; }
     public long Var2 { get; set; }
     public String Var3 { get; set; }
}

Затем, чтобы сериализовать экземпляр этого класса как двоичный файл ...

var state = new AppState();
state.Var1 = 4;
//TODO: populate the state object

var formatter = new BinaryFormatter();

using(var stream = new FileStream("C:\\app.state", FileMode.Create, FileAccess.Write))
{
    formatter.Serialize(stream, state);
    stream.Close();
}

Чтобы перезагрузить состояние, сначала убедитесь, что файл существует ...

if(File.Exists("C:\\path_to_file")){
    //TODO: do whatever you need to here, such as deserializing the file
}

Затем десериализуйте и инициализируйте все необходимые переменные ...

var formatter = new BinaryFormatter();
AppState state = null;

using(var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    state = (AppState) formatter.Deserialize(stream);
}

if(state != null){
    //TODO: initialize state
}

Обратите внимание, что существует много способов сериализации данных.Наиболее популярными являются:

  • Сериализация JSON
  • XML
  • Двоичный (как объяснено выше)
...