我找到了一些与编辑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);
}
答案 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+)";
请参阅此处的测试结果