Mercurial > repos > IBBoard.Ini
diff IniFileReader.cs @ 0:fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Thu, 08 Jan 2009 20:33:56 +0000 |
parents | |
children | f9444f1786cd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IniFileReader.cs Thu Jan 08 20:33:56 2009 +0000 @@ -0,0 +1,72 @@ +// This file (IniFileReader.cs) is a part of the IBBoard.Ini library and is copyright 2009 IBBoard. +// +// The file and the library/program it is in are licensed under the GNU LGPL license. Please see COPYING.LGPL for more information and the full license. + +using System; +using System.IO; +using System.Text; + +namespace IBBoard.Ini +{ + public class IniFileReader + { + public static IniFile ReadFile(string path) + { + return ReadFile(new FileInfo(path)); + } + + public static IniFile ReadFile(FileInfo file) + { + if (!file.Exists) + { + throw new FileNotFoundException(file.FullName+" did not exist and could not be read"); + } + + IniFile iniFile = new IniFile(); + LoadDataFromFile(file, iniFile); + return iniFile; + } + + private static void LoadDataFromFile(FileInfo file, IniFile iniFile) + { + StreamReader stream = file.OpenText(); + + try + { + LoadDataFromStream(iniFile, stream); + } + finally + { + stream.Close(); + } + } + + private static void LoadDataFromStream(IniFile iniFile, StreamReader stream) + { + StringBuilder sectionStringBuilder = new StringBuilder(); + + while (!stream.EndOfStream) + { + string line = stream.ReadLine().Trim(); + + if (IniSectionParser.IsLineStartOfNewSection(line)) + { + String currSection = sectionStringBuilder.ToString(); + + if (IniSectionParser.IsStringAnIniSection(currSection)) + { + IniSection section = IniSectionParser.CreateSection(currSection); + iniFile.AddSection(section); + } + + sectionStringBuilder.Length = 0; + } + + sectionStringBuilder.Append(line); + sectionStringBuilder.Append("\n"); + } + } + + + } +}