69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | using System; | ||
|  | using System.IO; | ||
|  | using System.Text; | ||
|  | using System.Collections.Generic; | ||
|  | 
 | ||
|  | namespace AniNIX.Shared { | ||
|  | 
 | ||
|  |     public class Configure { | ||
|  | 
 | ||
|  |         // This is the file to configure from | ||
|  |         private List<String> lines = new List<String>(); | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Create a new Configure object | ||
|  |         /// </summary> | ||
|  |         /// <param name="filename">The Config file</param>  | ||
|  |         public Configure(String filename) { | ||
|  |             StreamReader fileReader = new StreamReader(filename); | ||
|  |             String line = fileReader.ReadLine().Trim(); | ||
|  |             while (line != null) { | ||
|  |                 //Ignore comments prefixed with '#' | ||
|  |                 if (line.IndexOf('#') > 0) { | ||
|  |                     if (line[0] == '#') continue; | ||
|  |                     lines.Add(line.Split('#')[0].Trim()); | ||
|  |                 } else { | ||
|  |                     lines.Add(line); | ||
|  |                 } | ||
|  |                 line = fileReader.ReadLine(); | ||
|  |             } | ||
|  |             fileReader.Close(); | ||
|  |             fileReader.Dispose(); | ||
|  |         } | ||
|  |         /// <summary> | ||
|  |         /// Create a new string dictionary from the named section. | ||
|  |         /// </summary> | ||
|  |         /// <param name="section">The name of the section header</param> | ||
|  |         /// <returns>New Dictionary<String,String> of read key-value pairs from config section.</returns> | ||
|  |         public Dictionary<String,String> ReadSection(String  section) { | ||
|  |             Dictionary<String,String> foundEntries = new Dictionary<String,String>(); | ||
|  |             String header = String.Format("[ {0} ]",section); | ||
|  |             int i = 0, j; | ||
|  |             // Read to find the header | ||
|  |             for (i = 0; i < lines.Count; i++) { | ||
|  |                 if (lines[i].Equals(header)) { | ||
|  |                     i++;  | ||
|  |                     for (j = i; j < lines.Count && lines[j] != null && !String.IsNullOrWhiteSpace(lines[j]); j++) {  | ||
|  |                         int index = lines[j].IndexOf('=');  | ||
|  |                         String key = lines[j].Substring(0,index), value = lines[j].Substring(index+1); | ||
|  |                         if (foundEntries.ContainsKey(key)) { foundEntries[key] = value; } else { foundEntries.Add(key,value); } | ||
|  |                     } | ||
|  |                     break; // Most configuration utilities don't allow multiple same-named sections | ||
|  |                 } | ||
|  |             } | ||
|  |             return foundEntries; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// API for printing the configured section | ||
|  |         /// </summary> | ||
|  |         /// <param name="sectionEntries">The dictionary that has been read in</param> | ||
|  |         public static void PrintSectionAsRead(Dictionary<String,String> sectionEntries) { | ||
|  |             foreach (KeyValuePair<string,string> keyValue in sectionEntries) { | ||
|  |                 Console.WriteLine(String.Format("Key: {0} -- Value: {1}",keyValue.Key,keyValue.Value)); | ||
|  |             } | ||
|  |         }  | ||
|  | 
 | ||
|  |     } | ||
|  | } |