C#将数据与数据库分开存储

时间:2018-09-05 07:59:03

标签: c# json database storage config

我想存储几个要在我的应用程序中使用的字符串。 但是我不想将其存储在数据库或Config中。 原因是我想如果有人将应用程序从一个系统复制到另一个系统,则不应将字符串复制过来。 同样,可以在运行时通过应用程序来操作字符串。 最好的方法是什么?

4 个答案:

答案 0 :(得分:2)

一种简单的存储用户数据的方法是在用户主目录中的文件。如果数据仅应在程序内部使用,则可以使用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"

但是,用户不会轻易看到这些文件。因此,您应该考虑在不再需要此类文件时对其进行清理。

答案 1 :(得分:1)

一种方法是使用该计算机本地的stringkey进行加密,例如MAC address,同时将其保存在计算机上。显然,要使用它,您必须先读取它,然后使用相同的密钥对其进行解密。

这样,即使将字符串复制到另一个系统上,新系统也无法解密和使用string,因为它与原始计算机没有相同的key

此解决方案与您决定将字符串存储在bin或应用程序数据中还是系统上其他地方无关。

答案 2 :(得分:1)

简单的解决方案,在用户文档中创建一个文件,并将字符串存储在那里。它简单易行,但不提供任何安全性。如果您要存储敏感信息,那么任何人都可以阅读。用户也可以删除该文件,这将导致找不到文件异常。

第二个选项是将其写入注册表。这既不困难也不简单。注册表将解决文件的安全性问题。用户不会意外删除注册表。

答案 3 :(得分:1)

您可以使用注册表进行类似操作。

我有一个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);

您可以使用它来存储任何类型的值,而不仅仅是字符串。但这不应该用于敏感数据,因为用户可以使用Registryeditor读取和写入注册表的值。