编辑ini文件

时间:2014-05-30 07:32:29

标签: c# .net file edit ini

我找到了一些与编辑ini文件的某个部分完美配合的代码,但它只选择了我要编辑的第一行实例。我知道我可以手动输入我想要开始编辑的代码中的所有索引,但是知道事情如何随着时间的推移而改变,可能会对ini文件进行更改,然后索引也会发生变化。有人可以解释这个问题吗?

const string FileName = "File.ini";
string file= File.ReadAllText(FileName);

const string Pattern = @"pattern = (?<Number>)";

Match match = Regex.Match(config, Pattern, RegexOptions.IgnoreCase);

if (match.Success)
{
    int index = match.Groups["Number"].Index;

    string newText= **********;
    file = file.Remove(index, 21);
    file = file.Insert(index, newText);

    File.WriteAllText(FileName, file);
}  

2 个答案:

答案 0 :(得分:5)

简单的方法是使用WritePrivateProfileString的{​​{1}}和GetPrivateProfileString函数来读取和写入INI文件。

示例:

写入INI

Kernel32.dll

用法:

[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString")]
public static extern long WriteValueA(string strSection, 
                                       string strKeyName, 
                                       string strValue, 
                                       string strFilePath);

从INI读取

 WriteValueA("SectionToWrite", "KeyToWrite", "Value", @"D:\INIFile.ini");

用法:

[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString")]
public static extern int GetKeyValueA(string strSection, 
                                      string strKeyName, 
                                      string strEmpty, 
                                      StringBuilder RetVal, 
                                      int nSize, 
                                      string strFilePath);

答案 1 :(得分:1)

可能与为什么只有一场比赛的问题无关,但请注意,如果是这个正则表达式:

const string Pattern = @"pattern = (?<Number>)";

数字组将包含一个空字符串。你可能想要:

const string Pattern = @"pattern = (?<Number>\d+)";

请参阅此处的测试结果

http://regex101.com/r/aT1aT0