Mercurial > repos > IBBoard.Ini
annotate IniFile.cs @ 11:1c36044114a3
* Set default namespace
no-open-ticket
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 21 Aug 2010 10:05:54 +0000 |
parents | 848e7b151d3c |
children |
rev | line source |
---|---|
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (IniFile.cs) is a part of the IBBoard.Ini library and is copyright 2009 IBBoard. |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
6 | 3 // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license. |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 using System; |
1 | 6 using System.Collections; |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 using System.Collections.Generic; |
1 | 8 using System.Text; |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 namespace IBBoard.Ini |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 { |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 /// <summary> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 /// The <code>IniFile</code> provides access to INI formatted data. INI files are no longer used as much as they were, but many older applications including parts of Windows still use them to store data and configuration values in. |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 /// </summary> |
1 | 15 public class IniFile : IEnumerable<IniSection> |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
16 { |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 private Dictionary<string, IniSection> sections; |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 /// <summary> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 /// Default constructor that provides an empty INI file with no sections |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 /// </summary> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 public IniFile() |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
23 { |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 sections = new Dictionary<string,IniSection>(); |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 } |
1 | 26 |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 /// <summary> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
28 /// Adds an <see cref="IniSection"/> to the IniFile. |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 /// <p> |
5 | 30 /// Throws a DuplicateIniSectionException if the section already exists in this file |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 /// </summary> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
32 /// <param name="section"> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 /// The <see cref="IniSection"/> to add |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 /// </param> |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 public void AddSection(IniSection section) |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 { |
10
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
37 string sectionName = section.Name.ToLower(); |
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
38 |
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
39 if (!HasSection(sectionName)) |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 { |
10
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
41 sections.Add(sectionName, section); |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 } |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 else |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 { |
4
01fc09ab63e2
Re #7 - Add tests for INI parsing
IBBoard <dev@ibboard.co.uk>
parents:
2
diff
changeset
|
45 throw new DuplicateIniSectionException(section.Name); |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 } |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
47 } |
1 | 48 |
49 public IEnumerator<IniSection> GetEnumerator() | |
50 { | |
51 return sections.Values.GetEnumerator(); | |
52 } | |
53 | |
54 IEnumerator IEnumerable.GetEnumerator() | |
55 { | |
56 return sections.Values.GetEnumerator(); | |
57 } | |
58 | |
59 //// <value> | |
60 /// Gets a single section by name. If no section exists with that name then a <see cref=" NonExistantIniSection"/> is returned to remove the need for null checks. To check for the existance of a section use the <code>HasSection</code> method. | |
61 /// </value> | |
62 public IniSection this[string sectionName] | |
63 { | |
64 get | |
65 { | |
66 IniSection section = null; | |
10
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
67 sections.TryGetValue(sectionName.Trim().ToLower(), out section); |
1 | 68 |
69 if (section == null) | |
70 { | |
71 section = new NonExistantIniSection(); | |
72 } | |
73 | |
74 return section; | |
75 } | |
76 } | |
77 | |
2 | 78 /// <summary> |
79 /// Checks whether the IniFile contains an <see cref=" IniSection"/> with the specified name | |
80 /// </summary> | |
81 /// <param name="sectionName"> | |
82 /// The name of the section to look for | |
83 /// </param> | |
84 /// <returns> | |
85 /// <code>true</code> if the section is in the file, else <code>false</code> | |
86 /// </returns> | |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
87 public bool HasSection(string sectionName) |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
88 { |
10
848e7b151d3c
Re #17 - Make INI section names and keys case insensitive
IBBoard <dev@ibboard.co.uk>
parents:
9
diff
changeset
|
89 return sections.ContainsKey(sectionName.Trim().ToLower()); |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
90 } |
2 | 91 |
92 /// <summary> | |
93 /// Gets an array of the <see cref=" IniSection"/>s in the file | |
94 /// </summary> | |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
95 public IniSection[] Sections |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
96 { |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
97 get |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
98 { |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
99 IniSection[] col = new IniSection[sections.Count]; |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
100 sections.Values.CopyTo(col, 0); |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
101 return col; |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
102 } |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
103 } |
1 | 104 |
105 public override string ToString() | |
106 { | |
107 StringBuilder stringBuilder = new StringBuilder(); | |
108 | |
109 foreach (IniSection section in this) | |
110 { | |
111 stringBuilder.Append(section.ToString()); | |
112 stringBuilder.Append("\n"); | |
113 } | |
114 | |
115 return stringBuilder.ToString().Trim(); | |
116 } | |
8
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
117 |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
118 /// <summary> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
119 /// Gets the value from a given key-value pair in a given section. If either the section does not exist or the key does not exist |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
120 /// in the section then NULL will be returned. If the key exists in the section then its corresponding value will be returned. |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
121 /// </summary> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
122 /// <param name="sectionName"> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
123 /// The <code>IniSection</code> to look for <code>lineKey</code> in |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
124 /// </param> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
125 /// <param name="lineKey"> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
126 /// The key for the <code>IniKeyValuePairLine</code> within the <code>sectionName</code> <code>IniSection</code> to get the value for |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
127 /// </param> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
128 /// <returns> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
129 /// The value for the key in the section, or NULL if the section or the key do not exist |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
130 /// </returns> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
131 public string GetSectionLineValue(string sectionName, string lineKey) |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
132 { |
9
5b0052b5585f
Closes #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
133 IniSection section = this[sectionName]; |
5b0052b5585f
Closes #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
134 return section.GetLineValue(lineKey); |
8
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
135 } |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
136 |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
137 /// <summary> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
138 /// Gets the value from a given key-value pair in a given section. If either the section does not exist or the key does not exist |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
139 /// in the section then <code>defaultValue</code> will be returned. If the key exists in the section then its corresponding value will be returned. |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
140 /// </summary> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
141 /// <param name="sectionName"> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
142 /// The <code>IniSection</code> to look for <code>lineKey</code> in |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
143 /// </param> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
144 /// <param name="lineKey"> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
145 /// The key for the <code>IniKeyValuePairLine</code> within the <code>sectionName</code> <code>IniSection</code> to get the value for |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
146 /// </param> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
147 /// <param name="defaultValue"> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
148 /// The default value to return if the section or the key do not exist |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
149 /// </param> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
150 /// <returns> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
151 /// The value for the key in the section, or NULL if the section or the key do not exist |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
152 /// </returns> |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
153 public string GetSectionLineValue(string sectionName, string lineKey, string defaultValue) |
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
154 { |
9
5b0052b5585f
Closes #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
155 IniSection section = this[sectionName]; |
5b0052b5585f
Closes #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
8
diff
changeset
|
156 return section.GetLineValue(lineKey, defaultValue); |
8
2bba3fb360ed
Re #11 - Add getter methods to IniFile and IniSection
IBBoard <dev@ibboard.co.uk>
parents:
6
diff
changeset
|
157 } |
0
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
158 } |
fbde5e1920ba
Re #6 (Ini parsing library) - Initial commit of IBBoard Ini parsing
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
159 } |