目前我正在编写一个库,使读写INI文件变得简单,当键和值不存在时我已经让读者工作和写作但我无法轻易更新值,我尝试了各种方法替换字符串,但没有一个是实用的,程序需要旧值
以下是我在此尝试的示例:Regular Expression to replace unknown value in text file - c# and asp.net
Regex rgx = new Regex(@"SQL-SERVER-VERSION="".*?""");
string result = rgx.Replace(input, replacement);
但每次我修改该代码以替换该值时,它最终会替换该密钥,从而导致应用程序下次尝试读取该文件时出错。
以下是我目前使用的代码:
private string wholedata;
private void UpdateKey(string key, string path, string newval)
{
try
{
using (StreamReader s = new StreamReader(File.Open(path, FileMode.Open)))
{
wholedata = s.ReadToEnd();
Regex rgx = new Regex(key + ".*?");
string result = rgx.Replace(wholedata, newval);
MessageBox.Show(result);
}
using (StreamWriter s = new StreamWriter(File.Open(path, FileMode.OpenOrCreate)))
{
s.Write(wholedata);
}
}
catch (Exception e)
{
}
}
答案 0 :(得分:4)
为什么重写系统已经知道怎么做?看看这个项目:An INI file handling class using C#。您还应该知道Xml在.Net框架中占据了一席之地。使用配置框架或序列化/反序列化的简单设置对象并不罕见。我不知道你的要求,但它可以让我们描述你想要使用ini文件的原因。
那就是说,你正在写旧值(wholedata),而不是新值(结果)。这可能是根本原因。
当你调用Regex.Replace
时(string.Replace
这样做),它实际上会生成一个新字符串,并且不会更改参数中传递的字符串。
答案 1 :(得分:0)
将正则表达式更改为
Regex rgx = new Regex(@"(?<=SQL-SERVER-VERSION="").*?(?="")");
这将匹配前缀和后缀存在的条件.*?
((?<=)
和(?=)
分组)