C # Хранить данные отдельно от базы данных - PullRequest
0 голосов
/ 05 сентября 2018

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

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

Вы можете использовать реестр для подобных вещей.

У меня есть Registry-Helper-Class для выполнения таких действий:

public class RegistryUtils
{
    public static string Read(string subKey, string keyName)
    {
        RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(subKey, true);

        if (registryKey == null)
        {
            registryKey = Registry.CurrentUser.CreateSubKey(subKey, true);
        }

        var keyValue = registryKey.GetValue(keyName);
        registryKey.Close();

        return keyValue.ToString();
    }
    public static void Write(string subKey, string keyName, string keyValue)
    {
        RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(subKey, true);

        if (registryKey == null)
        {
            registryKey = Registry.CurrentUser.CreateSubKey(subKey, true);
        }

        registryKey.SetValue(keyName, keyValue);
        registryKey.Close();
    }
}

Тогда вы можете использовать класс для хранения таких вещей:

var storedValue = RegistryUtils.Read("MY_COMPANY/MY_PRODUCT","MY_STORED_VALUE");

RegistryUtils.Write("MY_COMPANY/MY_PRODUCT", "MY_STORED_VALUE", storedValue);

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

0 голосов
/ 05 сентября 2018

Простое решение, создайте файл в пользовательском документе и сохраните там строки. Он прост и легок в реализации, но не обеспечивает никакой безопасности. Если вы собираетесь хранить конфиденциальную информацию, то любой может ее прочитать. Также пользователь может удалить файл, что приведет к исключению файла не найден.

Второй вариант - записать его в реестр. Это ни сложно, ни просто. Реестр решит проблему безопасности с файлом. Пользователь не сможет случайно удалить реестр.

0 голосов
/ 05 сентября 2018

Простой способ хранения пользовательских данных - это файл в домашнем каталоге пользователя. Если данные предназначены для внутреннего использования только внутри вашей программы, можно использовать папку AppData\Local (например, "C:\\Users\\myuser\\AppData\\Local":

File.WriteAllText(
    Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
        "MyCompany", "MyProduct", "MyStrings.txt"),
    "Some strings");

Строки здесь хранятся в "C:\\Users\\myuser\\AppData\\Local\\MyCompany\\MyProduct\\MyStrings.txt".

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

0 голосов
/ 05 сентября 2018

Один из способов сделать это - зашифровать string с помощью key, который является локальным для этой машины, например. MAC address, сохраняя при этом на машине. Очевидно, чтобы использовать его, вам придется прочитать его, а затем расшифровать его с помощью того же ключа.

Таким образом, даже если строка копируется в другую систему, новая система не сможет расшифровать и использовать string, поскольку у нее нет того же key, что и у исходного компьютера.

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

...