Небольшой простой локальный магазин данных для сохранения пользовательских настроек

StackOverflow https://stackoverflow.com/questions/4400192

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть это крошечное приложение Winforms C #, которое не будет расти никоим образом. Это всего лишь два входных поля и кнопка.

Я хочу знать, если вы, ребята, знаете о пути к хранить то значения что пользовательские входы в местном хранилище. Отказ Вы можете рассмотреть 10 записей, чтобы быть большим количеством данных для этого сценария.

Требования

  1. Это не должно потребовать никакой настройки из стороны базы данных. (Создание таблицы и т. Д.)

  2. Я должен быть в состоянии просто дать ему объект, и он должен хранить его, я не хочу тратить время на это.

  3. Данные должны быть довольно легко извлечены.

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

Мои идеи

  1. Объект Poco, который будет XML-сериал и сохранен в папку локальных настроек. После загрузки приложения этот файл десериализируется обратно в объект POCO.

  2. Oodbms: у меня нет опыта с этим, но я всегда думал, что они состояли из одной DLL, поэтому их было бы легко упасть с программой.

  3. Однажды я давно давно построил приложение, которое сохранило пользовательские настройки внутри реестра. Не знаю, если это все еще ценится.

Как вы думаете, что является лучшим подходом?

Образцы кода очень ценятся!

Это было полезно?

Решение

Я забрал оба ответа и построил следующее:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

Объект Wapper Poco, который содержит, чтобы данные были сериализованы:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

Для потребления этих расширений:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

И в любом случае, где вы хотите получить данные:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

Чтобы сохранить данные:

_isoStore.SaveObject(_data, FILENAME);

Другие советы

Вы смотрели на Изолированное хранение? Он хранит данные в локальном файле, специфично для этого пользователя (или к приложению, в зависимости от того, как вы указываете). Вы можете легко сериализировать объекты в магазин и из магазина, потому что он на основе потока. Звучит как идеальное решение для вашей проблемы.

Поскольку вы говорите 10 предметов, было бы многое, я бы проголосовал за № 1 или вариации № 1, двоичного сериала ... вы, кажется, не указываете, что возможность читать данные, важные, а двоичные данные должны дать вам меньше Размеры файлов, хотя, если 10 - это много, это все еще не должно быть важно.

Это говорит, что мне нравится то, что я видел из DB4Objects.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top