2012-07-31 52 views
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) 
    { 
    } 
} 
+1

为什么重写什么系统已经知道该怎么做前提的.*??看看这个项目:http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C。无论如何,你正在写旧的价值(wholedata),而不是新的价值(结果)。这可能是根本原因。 – 2012-07-31 12:21:06

+0

感谢您的快速回复!我希望能够实现我自己的版本,虽然看到这个我可能只是建立它的顶部,谢谢! :) – 2012-07-31 12:23:22

+0

我的第一个问题是,如果它是未知的 - 你怎么知道它是在那里:-) – 2012-07-31 12:23:50

回答

4

为什么重写什么系统已经知道该怎么办?看看这个项目:An INI file handling class using C#。你也应该知道Xml已经在.Net框架中占据了一席之地。使用配置框架或序列化/反序列化的简单设置对象并不罕见。我不知道你的要求,但它可以让我们描述一下你为什么要使用ini文件。

这就是说,你写的是旧值(wholedata),而不是新值(结果)。这可能是根本原因。

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

0

更改正则表达式

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

这将匹配的前缀和后缀的((?<=)(?=)集团)

+0

谢谢,但我已决定使用@Steve B提供的示例 – 2012-07-31 12:31:32