0

目前我正在编写一个库来简化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)
     {
     }
}
4

2 回答 2

4

为什么要重写系统已经知道该怎么做?看看这个项目:使用 C# 的 INI 文件处理类。您还应该知道,Xml 在 .Net 框架中占有重要地位。使用配置框架或序列化/反序列化的简单设置对象并不少见。我不知道你的要求,但它可以启发我们描述一下你为什么要使用 ini 文件。

也就是说,您正在写入旧值(wholedata),而不是新值(结果)。这可能是根本原因。

当你调用Regex.Replace(so do string.Replace) 时,它实际上会生成一个新字符串,并且不会更改传入参数的字符串。

于 2012-07-31T12:24:22.570 回答
0

将正则表达式更改为

Regex rgx = new Regex(@"(?<=SQL-SERVER-VERSION="").*?(?="")");

这将匹配.*?前缀和后缀存在的条件((?<=)(?=)分组)

于 2012-07-31T12:26:27.987 回答