143 lines
4.4 KiB
C#
143 lines
4.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.Collections;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace PowerSwitcher
|
|
{
|
|
public class InIReader
|
|
{
|
|
private Dictionary<string,Dictionary<string,string>> cont;
|
|
private FileSystemWatcher k = new FileSystemWatcher(Directory.GetCurrentDirectory(), "*.ini");
|
|
private string filename;
|
|
|
|
public InIReader(string filename)
|
|
{
|
|
this.filename = filename;
|
|
k.Changed += new FileSystemEventHandler(this.readAgain);
|
|
loadFile();
|
|
}
|
|
|
|
private void readAgain(object sender, EventArgs e)
|
|
{
|
|
loadFile();
|
|
}
|
|
|
|
private void loadFile()
|
|
{
|
|
this.cont = new Dictionary<string, Dictionary<string, string>>();
|
|
StreamReader file = new StreamReader(this.filename);
|
|
List<String> buf = new List<string>();
|
|
string fline = "";
|
|
while (fline != null)
|
|
{
|
|
fline = file.ReadLine();
|
|
if (fline != null)
|
|
buf.Add(fline);
|
|
}
|
|
file.Close();
|
|
Dictionary<string, string> sub = new Dictionary<string, string>();
|
|
string cap = "";
|
|
foreach (string line in buf)
|
|
{
|
|
Match match = Regex.Match(line, @"^\[[a-zA-Z0-9\-_ ]+\]\w*$", RegexOptions.IgnoreCase);
|
|
if (match.Success)
|
|
{
|
|
if (sub.Count != 0 && cap != "")
|
|
{
|
|
cont.Add(cap, sub);
|
|
}
|
|
cap = line;
|
|
sub = new Dictionary<string, string>();
|
|
}
|
|
else
|
|
{
|
|
if (line != "" && cap != "")
|
|
{
|
|
string key = line.Substring(0,line.IndexOf('='));
|
|
string value = line.Substring(line.IndexOf('=')+1);
|
|
sub.Add(key, value);
|
|
}
|
|
}
|
|
}
|
|
if (sub.Count != 0 && cap != "")
|
|
{
|
|
cont.Add(cap, sub);
|
|
}
|
|
}
|
|
|
|
public List<String> getSections()
|
|
{
|
|
return cont.Keys.ToList<String>();
|
|
}
|
|
|
|
public String getValue(String section, String key)
|
|
{
|
|
if (!section.StartsWith("["))
|
|
{
|
|
section = "[" + section + "]";
|
|
}
|
|
if (cont.Keys.Contains(section))
|
|
{
|
|
if (cont[section].Keys.Contains(key))
|
|
{
|
|
return cont[section][key];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
public void SetValue(string section, string key, string value)
|
|
{
|
|
if (!section.StartsWith("["))
|
|
{
|
|
section = "[" + section + "]";
|
|
}
|
|
if (cont.Keys.Contains(section))
|
|
{
|
|
if (cont[section].Keys.Contains(key))
|
|
{
|
|
cont[section][key] = value;
|
|
}
|
|
else
|
|
{
|
|
cont[section].Add(key, value);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Dictionary<string,string> sub = new Dictionary<string,string>();
|
|
sub.Add(key, value);
|
|
cont.Add(section, sub);
|
|
}
|
|
k.Changed -= null;
|
|
saveSettings();
|
|
loadFile();
|
|
k.Changed += new FileSystemEventHandler(this.readAgain);
|
|
}
|
|
|
|
private void saveSettings()
|
|
{
|
|
StreamWriter file = new StreamWriter(this.filename);
|
|
file.BaseStream.SetLength(0);
|
|
file.BaseStream.Flush();
|
|
file.BaseStream.Seek(0, SeekOrigin.Begin);
|
|
foreach (KeyValuePair<string, Dictionary<string, string>> cap in this.cont)
|
|
{
|
|
file.WriteLine(cap.Key);
|
|
foreach (KeyValuePair<string, string> sub in cap.Value)
|
|
{
|
|
file.WriteLine(sub.Key + "=" + sub.Value);
|
|
}
|
|
file.WriteLine();
|
|
}
|
|
file.Flush();
|
|
file.Close();
|
|
}
|
|
}
|
|
}
|