[英]How can I replace a unknown string in a file?
目前,我正在编写一个库来简化读取和写入INI文件的过程,当键和值不存在时让阅读器可以工作和编写,但是我无法轻松地更新值,我尝试了各种方法来替换字符串但是都不可行,程序需要旧值
这是我在这里尝试过的一个示例: 正则表达式替换文本文件中的未知值-c#和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)
{
}
}
为什么要重写系统已经知道的操作方法? 看一下这个项目: 使用C#的INI文件处理类 。 您还应该知道Xml在.Net框架中占据了重要位置。 使用配置框架或序列化/反序列化的简单设置对象并不少见。 我不知道您的要求,但这可以启发我们描述您为什么要使用ini文件。
也就是说,您正在写入旧值(整个数据),而不是新值(结果)。 这可能是根本原因。
调用Regex.Replace
( string.Replace
也是string.Replace
),它实际上会生成一个新字符串,并且不会更改传入参数的字符串。
将正则表达式更改为
Regex rgx = new Regex(@"(?<=SQL-SERVER-VERSION="").*?(?="")");
这将匹配.*?
前提是存在前缀和后缀( (?<=)
和(?=)
分组)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.