Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.IO;
- using System.Collections.Specialized;
- using System.Collections.Generic;
- using System;
- namespace AyrA.IO
- {
- /// <summary>
- /// Represents a part from an INI file with settings and its name
- /// </summary>
- public class INIPart : IDisposable
- {
- /// <summary>
- /// Gets or sets the name of the section
- /// </summary>
- public string Section
- { get; set; }
- /// <summary>
- /// Gets or sets the values from the section
- /// </summary>
- public NameValueCollection Settings
- { get; set; }
- /// <summary>
- /// Creates a new INI part from known values
- /// </summary>
- /// <param name="Name">Section name</param>
- /// <param name="settings">Settings</param>
- public INIPart(string Name, NameValueCollection settings)
- {
- Section = Name;
- Settings = settings;
- }
- /// <summary>
- /// Creates a new INI part with a given name
- /// </summary>
- /// <param name="Name">Section name</param>
- public INIPart(string Name) : this(Name,new NameValueCollection())
- {
- }
- /// <summary>
- /// creates a blank INI part
- /// </summary>
- public INIPart() : this(string.Empty)
- {
- }
- ~INIPart()
- {
- Dispose();
- }
- /// <summary>
- /// Gets rid of the settings
- /// </summary>
- public void Dispose()
- {
- if (Settings != null)
- {
- Settings.Clear();
- Settings = null;
- }
- }
- }
- /// <summary>
- /// provides INI File Handling.
- /// All values are case sensitive
- /// </summary>
- public static class INI
- {
- /// <summary>
- /// Reads all sections from a file
- /// </summary>
- /// <param name="FileName">File Name</param>
- /// <returns>list of sections, null if file not found.</returns>
- public static string[] getSections(string FileName)
- {
- if (File.Exists(FileName))
- {
- string[] Lines = File.ReadAllLines(FileName);
- List<string> sections = new List<string>();
- foreach (string line in Lines)
- {
- if (line.Length > 0 && !line.StartsWith(";"))
- {
- if (line.StartsWith("[") && line.EndsWith("]"))
- {
- sections.Add(line.Substring(1, line.Length - 2));
- }
- }
- }
- return sections.ToArray();
- }
- return null;
- }
- /// <summary>
- /// Returns all settings from a section
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- /// <returns>List of settings (or null if file not found)</returns>
- public static NameValueCollection getSettings(string FileName, string Section)
- {
- if (File.Exists(FileName))
- {
- bool inSec = false;
- NameValueCollection nc = new NameValueCollection();
- string[] Lines = File.ReadAllLines(FileName);
- foreach (string line in Lines)
- {
- if (line.Length > 0 && !line.StartsWith(";") && !line.StartsWith("#"))
- {
- if (line.StartsWith("[") && line.EndsWith("]"))
- {
- inSec = (line.Substring(1, line.Length - 2) == Section);
- }
- else if (inSec && line.Contains("="))
- {
- nc.Add(line.Split('=')[0].Trim(), line.Split(new char[] { '=' }, 2)[1]);
- }
- }
- }
- return nc;
- }
- return null;
- }
- /// <summary>
- /// returns a single setting from the ini file
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- /// <param name="Setting">Setting name</param>
- /// <returns>setting, or null if file, section or setting not found</returns>
- public static string getSetting(string FileName, string Section, string Setting)
- {
- try
- {
- return getSettings(FileName, Section)[Setting];
- }
- catch
- {
- return null;
- }
- }
- /// <summary>
- /// gets an integer from the INI file
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- /// <param name="Setting">Setting name</param>
- /// <param name="Default">Default, if value is not an integer</param>
- /// <returns>integer</returns>
- public static int getInt(string FileName, string Section, string Setting, int Default)
- {
- int i = 0;
- if (!int.TryParse(getSetting(FileName, Section, Setting), out i))
- {
- i = Default;
- }
- return i;
- }
- /// <summary>
- /// returns all sections with settings from an INI file
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <returns>list of parts, null if file not found</returns>
- public static INIPart[] completeINI(string FileName)
- {
- List<INIPart> parts = new List<INIPart>();
- if (File.Exists(FileName))
- {
- INIPart p = new INIPart();
- foreach (string Line in File.ReadAllLines(FileName))
- {
- //Filter invalid Lines
- if (Line.Length > 0 && !Line.StartsWith(";"))
- {
- //New Section
- if (Line.StartsWith("[") && Line.EndsWith("]"))
- {
- if (!string.IsNullOrEmpty(p.Section))
- {
- parts.Add(p);
- }
- p = new INIPart();
- p.Section = Line.Substring(1, Line.Length - 2);
- p.Settings = new NameValueCollection();
- }
- else
- {
- //New Setting
- if (!string.IsNullOrEmpty(p.Section) && Line.Contains("="))
- {
- p.Settings.Add(Line.Split('=')[0].Trim(), Line.Split(new char[] { '=' }, 2)[1]);
- }
- }
- }
- }
- if (!string.IsNullOrEmpty(p.Section))
- {
- parts.Add(p);
- }
- return parts.ToArray();
- }
- return null;
- }
- /// <summary>
- /// Saves a single setting to the file
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- /// <param name="Setting">Setting name</param>
- /// <param name="Value">Setting value</param>
- /// <param name="Purge">true, to delete all other settings in that section, false to keep them</param>
- public static void Save(string FileName, string Section, string Setting, string Value, bool Purge)
- {
- if (Purge)
- {
- INIPart P = new INIPart(Section);
- P.Settings.Add(Setting, Value);
- Save(FileName, P, true);
- }
- else
- {
- NameValueCollection nvc = getSettings(FileName, Section);
- if (nvc == null)
- {
- nvc = new NameValueCollection();
- }
- bool added = false;
- for (int i = 0; i < nvc.Keys.Count; i++)
- {
- if (nvc.Keys[i].ToLower() == Setting.ToLower())
- {
- nvc[Setting] = Value;
- added = true;
- break;
- }
- }
- if (!added)
- {
- nvc.Add(Setting, Value);
- }
- Save(FileName, new INIPart(Section, nvc), true);
- }
- }
- /// <summary>
- /// Saves a complete section to the INI file
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Part">Section</param>
- /// <param name="KeepOthers">if true, other sections are kept, otherwise all others are removed</param>
- public static void Save(string FileName, INIPart Part, bool KeepOthers)
- {
- if (KeepOthers)
- {
- List<INIPart> ipa = null;
- if (completeINI(FileName) != null)
- {
- ipa = new List<INIPart>(completeINI(FileName));
- }
- bool added = false;
- if (ipa == null)
- {
- ipa = new List<INIPart>();
- }
- for (int i = 0; i < ipa.Count; i++)
- {
- if (ipa[i].Section.ToLower() == Part.Section.ToLower())
- {
- ipa[i] = Part;
- added = true;
- break;
- }
- }
- if (!added)
- {
- ipa.Add(Part);
- }
- Save(FileName, ipa.ToArray());
- ipa.Clear();
- }
- else
- {
- Save(FileName, new INIPart[] { Part });
- }
- }
- /// <summary>
- /// Saves multiple sections to an INI file, replacing it completely
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Parts">List of sections</param>
- public static void Save(string FileName, INIPart[] Parts)
- {
- Delete(FileName);
- StreamWriter FS = File.CreateText(FileName);
- FS.NewLine = "\r\n";
- foreach (INIPart ip in Parts)
- {
- if (ip.Settings == null)
- {
- ip.Settings = new NameValueCollection();
- }
- if (string.IsNullOrEmpty(ip.Section))
- {
- throw new ArgumentException("Section contains no name");
- }
- else
- {
- FS.WriteLine("[{0}]", ip.Section);
- foreach (string ipsk in ip.Settings.AllKeys)
- {
- if (!ipsk.StartsWith(";"))
- {
- FS.WriteLine("{0}={1}", ipsk, ip.Settings[ipsk]);
- }
- else
- {
- FS.WriteLine(ipsk);
- }
- }
- FS.WriteLine();
- }
- }
- FS.Close();
- }
- /// <summary>
- /// Deletes a setting from the INI File
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- /// <param name="Setting">Setting name</param>
- public static void Delete(string FileName, string Section, string Setting)
- {
- NameValueCollection nvc = getSettings(FileName, Section);
- if (nvc[Setting] != null)
- {
- nvc.Remove(Setting);
- Save(FileName, new INIPart(Section, nvc), true);
- }
- }
- /// <summary>
- /// Deletes a complete section
- /// </summary>
- /// <param name="FileName">File name</param>
- /// <param name="Section">Section name</param>
- public static void Delete(string FileName, string Section)
- {
- List<INIPart> Parts = new List<INIPart>(completeINI(FileName));
- bool removed = false;
- for (int i = 0; i < Parts.Count; i++)
- {
- if (Parts[i].Section == Section)
- {
- Parts.RemoveAt(i);
- removed = true;
- break;
- }
- }
- if (removed)
- {
- Save(FileName, Parts.ToArray());
- }
- }
- /// <summary>
- /// Deletes the INI file
- /// </summary>
- /// <param name="FileName">File name</param>
- public static void Delete(string FileName)
- {
- if(File.Exists(FileName))
- {
- File.Delete(FileName);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement