我主要是C#.NET 4.0开发人员,现在我正在重新考虑过去存储和检索应用程序设置的方法。
在过去,我使用了各种方法,从简单的“扁平”文本文件到制表符分隔的键/值,到分层的XML文件,以及其他一些方法。我过去曾经使用过(并且正在考虑再次使用)内置的App.Config / AppSettings类,但是没有任何内置的方法来保存您从此源加载的数据(我可以进入我在做这件事时遇到的困难,但这不是问题的重点。)
这里的要点是,所有这些方法都有其缺点,虽然有些方法比其他方法更好,但有些方法比其他方法更容易使用,我试图确定一致且可靠的方法。
我的问题,可能会有一些有效的答案,所以我将被迫选择最好的答案,这是:如果有任何内置框架,你会建议保存和加载数据可以附带可执行文件的设置文件,或者如果不是内置框架,您会推荐什么标准? XML? '平'文件?独立数据库?
假设配置本身不会那么大,并且将从数据库(或使用其他一些技术)读取任何实际数量的数据。
答案 0 :(得分:2)
虽然我是一个注册表粉丝,并且宁愿在那里设置我的设置,但我使用了我的c#apps我使用了内置的设置 - 所以在项目属性下你可以定义一个加载及其默认值,然后访问他们与
Properties.Settings.Default.<settingname>
也可以设置它们,所以Properties.Settings.Default.HideDisabled = true;
您可以使用
保存它们Properties.Settings.Default.Save();
我没有遇到过这方面的问题,但是,正如你所说的那样,一切都有赞成和反对。
答案 1 :(得分:1)
另一种方式(kernel32),它与C#甚至C#4.0并不多,但是因为我们已经启动了变体列表,所以它必须在这里有效
namespace Ini {
public class IniFile {
private string path;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,
string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
public IniFile(string INIPath) {
path = INIPath;
}
public void IniWriteValue(string Section, string Key, string Value) {
WritePrivateProfileString(Section, Key, Value, this.path);
}
public string IniReadValue(string Section, string Key) {
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
return temp.ToString();
}
}
}
答案 2 :(得分:1)
我参与过的一些应用程序涉及本地数据库,我们也使用该数据库文件来保存我们的设置。它有效,但它只是感觉有点不对,如果您希望能够在应用程序未运行时修改设置,则可能会出现问题。 (绕过崩溃或类似的东西。)
我经常使用存储在Environment.SpecialFolder.ApplicationData
文件夹中的XML文件并使用DataContractSerializer
。它允许您进行一些版本控制,但最重要的是,当您的设置对象上的某些属性是新的或不存在时,它能够加载和保存XML文件。它不会使应用程序崩溃,当您再次保存设置时,它只会保存最新版本。我认为这很干净,很简单。