Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- namespace SomeNameNamespace //zamenite na svojo
- {
- public class ini_parser
- {
- private Hashtable keyPairs = new Hashtable();
- private String iniFilePath;
- private struct SectionPair
- {
- public String Section;
- public String Key;
- }
- /// <summary>
- /// Opens the INI file at the given path and enumerates the values in the IniParser.
- /// </summary>
- /// <param name="iniPath">Full path to INI file.</param>
- public ini_parser(String iniPath)
- {
- TextReader iniFile = null;
- String strLine = null;
- String currentRoot = null;
- String[] keyPair = null;
- String comment = "#";
- this.iniFilePath = iniPath;
- if (File.Exists(iniPath))
- {
- try
- {
- iniFile = new StreamReader(iniPath);
- strLine = iniFile.ReadLine();
- while (strLine != null)
- {
- strLine = strLine.Trim();
- if (strLine != "")
- {
- if (strLine.StartsWith("[") && strLine.EndsWith("]"))
- {
- currentRoot = strLine.Substring(1, strLine.Length - 2);
- }
- else
- {
- if (!strLine.StartsWith(comment))
- {
- keyPair = strLine.Split(new char[] { '=' }, 2);
- SectionPair sectionPair;
- String value = null;
- if (currentRoot == null)
- currentRoot = "ROOT";
- sectionPair.Section = currentRoot;
- sectionPair.Key = keyPair[0];
- if (keyPair.Length > 1)
- value = keyPair[1];
- this.keyPairs.Add(sectionPair, value);
- }
- }
- }
- strLine = iniFile.ReadLine();
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- finally
- {
- if (iniFile != null)
- iniFile.Close();
- }
- }
- else
- // throw new FileNotFoundException("Unable to locate " + iniPath);
- //Взял смелость допилить, если файла нет - создается пустой
- {
- try
- {
- TextWriter tw = new StreamWriter(iniPath);
- tw.Write("");
- tw.Close();
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- }
- /// <summary>
- /// Returns the value for the given section, key pair.
- /// </summary>
- /// <param name="sectionName">Section name.</param>
- /// <param name="settingName">Key name.</param>
- public String GetSetting(String sectionName, String settingName)
- {
- SectionPair sectionPair;
- sectionPair.Section = sectionName.ToUpper();
- sectionPair.Key = settingName.ToUpper();
- return (String)this.keyPairs[sectionPair];
- }
- /// <summary>
- /// Enumerates all lines for given section.
- /// </summary>
- /// <param name="sectionName">Section to enum.</param>
- public String[] EnumSection(String sectionName)
- {
- ArrayList tmpArray = new ArrayList();
- foreach (SectionPair pair in this.keyPairs.Keys)
- {
- if (pair.Section == sectionName.ToUpper())
- tmpArray.Add(pair.Key);
- }
- return (String[])tmpArray.ToArray(typeof(String));
- }
- /// <summary>
- /// Enumerates all key-value pairs for given section.
- /// </summary>
- /// <param name="sectionName">Section to enum.</param>
- /// <returns>Dictionary equals to INI-section.</returns>
- public Dictionary<String, String> EnumSectionKeyValue(String sectionName)
- {
- Dictionary<String, String> ret = new Dictionary<String, String>();
- foreach (SectionPair pair in this.keyPairs.Keys)
- {
- if (pair.Section == sectionName.ToUpper())
- {
- ret.Add(pair.Key, this.GetSetting(sectionName, pair.Key));
- }
- }
- return ret;
- }
- /// <summary>
- /// Enumarates all section-key pairs equal given value.
- /// </summary>
- /// <param name="value">Value to enum.</param>
- /// <returns>Dictionary.</returns>
- public Dictionary<String, String> EnumValue(String value)
- {
- Dictionary<String, String> ret = new Dictionary<String, String>();
- foreach (SectionPair pair in this.keyPairs.Keys)
- {
- if (this.GetSetting(pair.Section, pair.Key) == value)
- {
- ret.Add(pair.Section, pair.Key);
- }
- }
- return ret;
- }
- /// <summary>
- /// Adds or replaces a setting to the table to be saved.
- /// </summary>
- /// <param name="sectionName">Section to add under.</param>
- /// <param name="settingName">Key name to add.</param>
- /// <param name="settingValue">Value of key.</param>
- public void AddSetting(String sectionName, String settingName, String settingValue)
- {
- SectionPair sectionPair;
- sectionPair.Section = sectionName.ToUpper();
- sectionPair.Key = settingName.ToUpper();
- if (this.keyPairs.ContainsKey(sectionPair))
- this.keyPairs.Remove(sectionPair);
- this.keyPairs.Add(sectionPair, settingValue);
- }
- /// <summary>
- /// Adds or replaces a setting to the table to be saved with a null value.
- /// </summary>
- /// <param name="sectionName">Section to add under.</param>
- /// <param name="settingName">Key name to add.</param>
- public void AddSetting(String sectionName, String settingName)
- {
- AddSetting(sectionName, settingName, null);
- }
- /// <summary>
- /// Remove a setting.
- /// </summary>
- /// <param name="sectionName">Section to add under.</param>
- /// <param name="settingName">Key name to add.</param>
- public void DeleteSetting(String sectionName, String settingName)
- {
- SectionPair sectionPair;
- sectionPair.Section = sectionName.ToUpper();
- sectionPair.Key = settingName.ToUpper();
- if (this.keyPairs.ContainsKey(sectionPair))
- this.keyPairs.Remove(sectionPair);
- }
- /// <summary>
- /// Save settings to new file.
- /// </summary>
- /// <param name="newFilePath">New file path.</param>
- public void SaveSettings(String newFilePath)
- {
- ArrayList sections = new ArrayList();
- String tmpValue = String.Empty;
- String strToSave = String.Empty;
- foreach (SectionPair sectionPair in this.keyPairs.Keys)
- {
- if (!sections.Contains(sectionPair.Section))
- sections.Add(sectionPair.Section);
- }
- foreach (String section in sections)
- {
- strToSave += ("[" + section + "]\r\n");
- foreach (SectionPair sectionPair in this.keyPairs.Keys)
- {
- if (sectionPair.Section == section)
- {
- tmpValue = (String)this.keyPairs[sectionPair];
- if (tmpValue != null)
- tmpValue = "=" + tmpValue;
- strToSave += (sectionPair.Key + tmpValue + "\r\n");
- }
- }
- strToSave += "\r\n";
- }
- try
- {
- TextWriter tw = new StreamWriter(newFilePath);
- tw.Write(strToSave);
- tw.Close();
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- /// <summary>
- /// Save settings back to ini file.
- /// </summary>
- public void SaveSettings()
- {
- SaveSettings(this.iniFilePath);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement