我想存储几个要在我的应用程序中使用的字符串。 但是我不想将其存储在数据库或Config中。 原因是我想如果有人将应用程序从一个系统复制到另一个系统,则不应将字符串复制过来。 同样,可以在运行时通过应用程序来操作字符串。 最好的方法是什么?
答案 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)
一种方法是使用该计算机本地的string
对key
进行加密,例如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读取和写入注册表的值。