From 8b611dfcecb4732c419bad1aba438b736f717d7d Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Tue, 26 Sep 2017 17:55:51 +0000 Subject: [PATCH] [NF] Kleine Verbesserung im INIReader --- InIReader.cs | 54 +++++++++++++++++++++---------------- Properties/AssemblyInfo.cs | 6 ++--- bin/Release/Utils.dll | Bin 24576 -> 24576 bytes 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/InIReader.cs b/InIReader.cs index 3c2bcfe..1db1879 100644 --- a/InIReader.cs +++ b/InIReader.cs @@ -10,7 +10,7 @@ namespace BlubbFish.Utils { public class InIReader : IDisposable { - private Dictionary> cont; + private Dictionary> inifile; private FileSystemWatcher k = new FileSystemWatcher(Directory.GetCurrentDirectory(), "*.ini"); private String filename; @@ -38,7 +38,7 @@ namespace BlubbFish.Utils private void LoadFile() { - this.cont = new Dictionary>(); + this.inifile = new Dictionary>(); StreamReader file = new StreamReader(this.filename); List buf = new List(); String fline = ""; @@ -55,7 +55,7 @@ namespace BlubbFish.Utils Match match = Regex.Match(line, @"^\[[a-zA-ZäöüÄÖÜ0-9\-_ ]+\]\w*$", RegexOptions.IgnoreCase); if (match.Success) { if (sub.Count != 0 && cap != "") { - this.cont.Add(cap, sub); + this.inifile.Add(cap, sub); } cap = line; sub = new Dictionary(); @@ -68,21 +68,29 @@ namespace BlubbFish.Utils } } if (sub.Count != 0 && cap != "") { - this.cont.Add(cap, sub); + this.inifile.Add(cap, sub); } } - public List GetSections() + public List GetSections(Boolean withBrackets = true) { - return this.cont.Keys.ToList(); + if(withBrackets) { + return this.inifile.Keys.ToList(); + } else { + List ret = new List(); + foreach (String item in this.inifile.Keys) { + ret.Add(item.Substring(1, item.Length - 2)); + } + return ret; + } } public Dictionary GetSection(String section) { - if(this.cont.Keys.Contains(section)) { - return this.cont[section]; + if(this.inifile.Keys.Contains(section)) { + return this.inifile[section]; } - if(this.cont.Keys.Contains("["+section+"]")) { - return this.cont["[" + section + "]"]; + if(this.inifile.Keys.Contains("["+section+"]")) { + return this.inifile["[" + section + "]"]; } return new Dictionary(); } @@ -92,9 +100,9 @@ namespace BlubbFish.Utils if (!section.StartsWith("[")) { section = "[" + section + "]"; } - if (this.cont.Keys.Contains(section)) { - if (this.cont[section].Keys.Contains(key)) { - return this.cont[section][key]; + if (this.inifile.Keys.Contains(section)) { + if (this.inifile[section].Keys.Contains(key)) { + return this.inifile[section][key]; } } return null; @@ -106,17 +114,17 @@ namespace BlubbFish.Utils if (!section.StartsWith("[")) { section = "[" + section + "]"; } - if (this.cont.Keys.Contains(section)) { - if (this.cont[section].Keys.Contains(key)) { - this.cont[section][key] = value; + if (this.inifile.Keys.Contains(section)) { + if (this.inifile[section].Keys.Contains(key)) { + this.inifile[section][key] = value; } else { - this.cont[section].Add(key, value); + this.inifile[section].Add(key, value); } } else { Dictionary sub = new Dictionary { { key, value } }; - this.cont.Add(section, sub); + this.inifile.Add(section, sub); } this.Changed(); } @@ -135,7 +143,7 @@ namespace BlubbFish.Utils file.BaseStream.SetLength(0); file.BaseStream.Flush(); file.BaseStream.Seek(0, SeekOrigin.Begin); - foreach (KeyValuePair> cap in this.cont) { + foreach (KeyValuePair> cap in this.inifile) { file.WriteLine(cap.Key); foreach (KeyValuePair sub in cap.Value) { file.WriteLine(sub.Key + "=" + sub.Value); @@ -156,10 +164,10 @@ namespace BlubbFish.Utils if (!name.StartsWith("[")) { name = "[" + name + "]"; } - if (this.cont.Keys.Contains(name)) { + if (this.inifile.Keys.Contains(name)) { return false; } - this.cont.Add(name, new Dictionary()); + this.inifile.Add(name, new Dictionary()); this.Changed(); return true; } @@ -174,10 +182,10 @@ namespace BlubbFish.Utils if (!name.StartsWith("[")) { name = "[" + name + "]"; } - if (!this.cont.Keys.Contains(name)) { + if (!this.inifile.Keys.Contains(name)) { return false; } - this.cont.Remove(name); + this.inifile.Remove(name); this.Changed(); return false; } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 28db545..eae4588 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Utils")] -[assembly: AssemblyCopyright("Copyright © 2014 - 24.09.2017")] +[assembly: AssemblyCopyright("Copyright © 2014 - 25.09.2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.5.1")] -[assembly: AssemblyFileVersion("1.0.5.1")] +[assembly: AssemblyVersion("1.0.5.2")] +[assembly: AssemblyFileVersion("1.0.5.2")] diff --git a/bin/Release/Utils.dll b/bin/Release/Utils.dll index 9647ff5de5e38dc5b5cc091289b2ae828289af75..28f5d3debb41c7436ba7309617ee5861c8898473 100644 GIT binary patch delta 9371 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 u`g-dJt39Q7BiENo?ddgdLUYB`0l