我正在尝试理解并可能重用部分DevExpress演示代码以将简单设置保存到ini文件中。我知道我可以使用.NET System.Configuration做我想要的。只是为了一个小项目,简单地将其保存为文本文件似乎更灵活,重量更轻,至少看起来就是这样。
无论如何,当我正在玩它时,我试图理解为什么我正在阅读的代码试图将键添加为“[] Server”和“[] DBFormat”作为键名。他们这样做是因为我无法理解的原因,我可能会在这里使用一些帮助。
以下是我认为相关的准则:
public class IniFile {
SortedDictionary<string, string> data = new SortedDictionary<string, string>();
...
public void Load(string path) {
using(StreamReader sr = new StreamReader(path)) {
string folder = "[]";
while(!sr.EndOfStream) {
string s = sr.ReadLine().Trim();
if(s.Length == 0 || s[0] == ';') continue;
if(s[0] == '[') {
folder = s;
continue;
}
string key, value;
int delim = s.IndexOf('=');
if(delim < 0) {
key = folder + s.Replace("[", string.Empty).Replace("]", string.Empty);
value = string.Empty;
} else {
key = folder + s.Remove(delim).TrimEnd().Replace("[", string.Empty).Replace("]", string.Empty);
value = s.Substring(delim + 1).TrimStart();
}
if(!data.ContainsKey(key)) data.Add(key, value);
else data[key] = value;
}
}
}
...
public void Save(string path) {
using(StreamWriter sw = new StreamWriter(path)) {
string folder = "[]";
foreach(string key in data.Keys) {
int delim = key.IndexOf(']');
string keyFolder = key.Remove(delim + 1);
string keyName = key.Substring(delim + 1);
if(keyFolder != folder) {
folder = keyFolder;
sw.WriteLine(folder);
}
sw.WriteLine(keyName + " = " + data[key]);
}
}
}
void AddRawValue(string key, string value) {
key = key.Trim();
value = value.Trim();
int folderBegin = key.IndexOf('[');
int folderEnd = key.IndexOf(']');
if(folderBegin != 0 || folderEnd < 0) throw new ArgumentException("key");
data.Add(key, value);
}
这是ini文件本身的一部分:
DBFormat = "Mdb"
Login = "admin"
Password = ""
Server = "(localhost)"
很明显,出于某些原因,他们不得不将[]添加到keyname中,但最终却没有在演示数据中使用它。我认为他们在[]中使用字符串来分组设置?
答案 0 :(得分:1)
我只是浏览了它,但我认为意图可能是"[section]setting"
,因此"[]setting"
代表某个部分中的设置而不是。看看获取值是多么容易,只需要一个字符串即可! (“部分”和“文件夹”之间似乎存在混淆 - 这可能是该代码的一个高于变量的变量名称......)
然后再次,我可能会离开,因为我只投入了大约10秒的时间在该肚子上:>)
快乐的编码。