using System; using System.IO; using System.Text.RegularExpressions;namespace Yzf.Utility { /// <summary> /// IniFile reader /// </summary> public class IniFile { private string fileContents = null; /// <summary> /// Constructor, given an INI file name, read the content /// </summary> /// <param name="fileName"></param> public IniFile(string fileName) { if(File.Exists(fileName)) { StreamReader r = File.OpenText(fileName); fileContents = r.ReadToEnd(); r.Close(); } } /// <summary> /// Get section names in an array, Read only /// </summary> public string[] SectionNames { get { // Using regular expression to get all section names. string regexPattern = @"\[(?<SectionName>\w*(\w|\s)*)\]"; Regex r = new Regex(regexPattern); // Match "[anywords]" MatchCollection matches = r.Matches(fileContents); // Writing all section names to a string array. string[] results = new string[matches.Count]; for(int i = 0; i < matches.Count; i++) { results[i] = matches[i].Result("${SectionName}"); } return results; } } /// <summary> /// Get the whole string in one section /// </summary> /// <param name="sectionName"></param> /// <returns></returns> public string GetSectionString(string sectionName) { string regexPattern = @"(\[" + sectionName + @"\]" + @"(?<SectionString>.*)\[)"; Regex r = new Regex(regexPattern, RegexOptions.Singleline); if(r.IsMatch(fileContents)) { return r.Match(fileContents).Result("${SectionString}"); } return string.Empty; } /// <summary> /// Get the string value of certain key in certain section /// </summary> /// <param name="sectionName"></param> /// <param name="keyName"></param> /// <returns></returns> public string GetKeyString(string sectionName, string keyName) { string sectionString = this.GetSectionString(sectionName); string regexPattern = @"(" + keyName + @"=(?<value>.*)\r\n)"; Regex r = new Regex(regexPattern); if(r.IsMatch(fileContents)) { return r.Match(fileContents).Result("${value}"); } return string.Empty; } } }
public class INIClass { public string inipath; [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section,string key,string val,string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath); /// <summary> /// 构造方法 /// </summary> /// <param name="INIPath">文件路径</param> public INIClass(string INIPath) { inipath = INIPath; } /// <summary> /// 写入INI文件 /// </summary> /// <param name="Section">项目名称(如 [DataTP] )</param> /// <param name="Key">键</param> /// <param name="Value">值</param> public void IniWriteValue(string Section,string Key,string Value) { WritePrivateProfileString(Section,Key,Value,this.inipath); } /// <summary> /// 读出INI文件 /// </summary> /// <param name="Section">项目名称(如 [DataTP] )</param> /// <param name="Key">键</param> public string IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(500); int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath); return temp.ToString(); } /// <summary> /// 验证文件是否存在 /// </summary> /// <returns>布尔值</returns> public bool ExistINIFile() { return File.Exists(inipath); } }
using System;
using System.IO;
using System.Text.RegularExpressions;namespace Yzf.Utility
{
/// <summary>
/// IniFile reader
/// </summary>
public class IniFile
{
private string fileContents = null; /// <summary>
/// Constructor, given an INI file name, read the content
/// </summary>
/// <param name="fileName"></param>
public IniFile(string fileName)
{
if(File.Exists(fileName))
{
StreamReader r = File.OpenText(fileName);
fileContents = r.ReadToEnd();
r.Close();
}
} /// <summary>
/// Get section names in an array, Read only
/// </summary>
public string[] SectionNames
{
get
{
// Using regular expression to get all section names.
string regexPattern = @"\[(?<SectionName>\w*(\w|\s)*)\]"; Regex r = new Regex(regexPattern); // Match "[anywords]"
MatchCollection matches = r.Matches(fileContents); // Writing all section names to a string array.
string[] results = new string[matches.Count]; for(int i = 0; i < matches.Count; i++)
{
results[i] = matches[i].Result("${SectionName}");
}
return results;
}
} /// <summary>
/// Get the whole string in one section
/// </summary>
/// <param name="sectionName"></param>
/// <returns></returns>
public string GetSectionString(string sectionName)
{
string regexPattern = @"(\[" + sectionName + @"\]"
+ @"(?<SectionString>.*)\[)"; Regex r = new Regex(regexPattern, RegexOptions.Singleline);
if(r.IsMatch(fileContents))
{
return r.Match(fileContents).Result("${SectionString}");
} return string.Empty;
} /// <summary>
/// Get the string value of certain key in certain section
/// </summary>
/// <param name="sectionName"></param>
/// <param name="keyName"></param>
/// <returns></returns>
public string GetKeyString(string sectionName, string keyName)
{
string sectionString = this.GetSectionString(sectionName);
string regexPattern = @"(" + keyName + @"=(?<value>.*)\r\n)"; Regex r = new Regex(regexPattern);
if(r.IsMatch(fileContents))
{
return r.Match(fileContents).Result("${value}");
} return string.Empty;
} }
}
{
public string inipath;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">文件路径</param>
public INIClass(string INIPath)
{
inipath = INIPath;
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="Section">项目名称(如 [DataTP] )</param>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.inipath);
}
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="Section">项目名称(如 [DataTP] )</param>
/// <param name="Key">键</param>
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
return temp.ToString();
}
/// <summary>
/// 验证文件是否存在
/// </summary>
/// <returns>布尔值</returns>
public bool ExistINIFile()
{
return File.Exists(inipath);
}
}