C# - 在特定值之间替换文本文件中的字符串

时间:2018-05-27 06:09:07

标签: c# streamreader streamwriter

我在尝试弄清楚如何替换应用程序的配置文件中的IP地址时遇到了问题。 IP位于多个不同的配置文件中,如下所示

[Connection]
### Address of the database server
DBServer=10.10.102.114
### Name of the database
DBData=DB1

我需要能够读取文件,然后搜索一个字符串(对于这个文件,它将是“DBServer =”)并让它替换搜索到的字符串和辅助字符串或行尾字符之间的字符串如在这个例子中

我似乎只能找到找到并替换找到的字符串的方法,但每次安装时IP都不同,所以我不能直接可靠地搜索IP

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

在这些只知道模式的情况下,您应该使用正则表达式。这是非常容易使用。 您需要添加此命名空间:

    using System.Text.RegularExpressions;

然后定义你的模式:

    string pattern=@"DBServer=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})";
    Regex regex=new Regex(pattern);
    var match = regex.Match("YOUR_INPUT_STRING");
    string result;
    if(match.Success)
        if(match.Groups.Count > 0)
            result=match.Group[1].Value;

答案 1 :(得分:0)

谢谢大家,最后使用下面的方式让它工作.....它可能不是最好的做法,但似乎工作

string line;
using (StreamReader sr = new StreamReader(@"C:\config.ini"))
{
     line = sr.ReadToEnd();
}


Regex x = new Regex("(\\DBServer\\=)(.*?)(\n|\r|\r\n)");
string repl = IP;
string Result = x.Replace(line, "DBServer=" + repl + "$3");
using (StreamWriter writer =
     new StreamWriter(@"C:\config.ini"))
{
     writer.Write(Result);
}

答案 2 :(得分:0)

该文件是.ini文件。如今,它们已经基本上不再流行,而是支持XML或者最近的JSON配置文件。

我建议使用ini-parser NuGet包。

您可以像这样使用它来更新DBServer值:

string iniFile = @"test.ini";
var parser = new FileIniDataParser();
IniData data = null;
data = parser.ReadFile(iniFile);
data.Sections["Connection"]["DBServer"] = "newValue";
parser.WriteFile(iniFile, data);