[Résolu] Comment lire un fichier .ini ?

Comment lire un fichier .ini ? [Résolu] - C#/.NET managed - Programmation

Marsh Posté le 29-01-2007 à 17:48:38    

Salut à tous,
 
Je souhaite lire un fichier .ini de configuration. On m'a dit d'utiliser "GetPrivateProfileString" mais je n'y arrive pas...  :fou:  
 
Vous n'auriez pas un petit bout de code qui montre comment faire svp ?  :??:  
 
Merci par avance,
Lionel.


Message édité par pot2yaourt le 31-01-2007 à 08:27:48
Reply

Marsh Posté le 29-01-2007 à 17:48:38   

Reply

Marsh Posté le 29-01-2007 à 22:14:38    

si c'est pour de la configuration, utilise plutot les .config (app ou web), ils sont la pour ca !

Reply

Marsh Posté le 30-01-2007 à 11:11:32    

Tamahome a écrit :

si c'est pour de la configuration, utilise plutot les .config (app ou web), ils sont la pour ca !


+1
 
sinon, pour les INI, y'a ça qui est pas mal : http://www.codeproject.com/csharp/cs_ini.asp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-01-2007 à 17:28:52    

Merci pour les réponses !
La classe de CodeProject à l'air pas mal !!  
 
A+
Lionel.

Reply

Marsh Posté le 31-01-2007 à 08:26:43    

Voici une autre classe que j'ai trouvé pour lire et même écrire des fichiers de conf.
 
La roue a été quelque peu réinventée, mais en tous cas ça fonctionne !
 
 

Code :
  1. using System;
  2. namespace Ini
  3. {
  4.     namespace Exceptions
  5.     {
  6.         class InvalidInputException : System.Exception { }
  7.         class ValueDoesntExistException : System.Exception { }
  8.         class KeyDoesntExistException : System.Exception { }
  9.     }
  10.     /// <summary>
  11.     ///  
  12.     /// </summary>
  13.     public class Configuration
  14.     {
  15.         /// <summary>
  16.         /// The key is a string, the value is another Hashtable, which contains the values.
  17.         /// </summary>
  18.         System.Collections.Hashtable Keys;
  19.         /// <summary>
  20.         /// This contains values without Key
  21.         /// </summary>
  22.         System.Collections.Hashtable Values;
  23.         /// <summary>
  24.         /// Construct an empty configuration
  25.         /// </summary>
  26.         public Configuration()
  27.         {
  28.             Keys = new System.Collections.Hashtable();
  29.             Values = new System.Collections.Hashtable();
  30.         }
  31.         /// <summary>
  32.         /// Construct the class from data got through the text reader
  33.         /// </summary>
  34.         /// <param name="tr">The source for constructing the class</param>
  35.         public Configuration(System.IO.TextReader tr)
  36.         {
  37.             Keys = new System.Collections.Hashtable();
  38.             Values = new System.Collections.Hashtable();
  39.             Parse(tr);
  40.         }
  41.         /// <summary>
  42.         /// Get a value from the class
  43.         /// </summary>
  44.         /// <param name="Key">The key from which to get the value</param>
  45.         /// <param name="ValueName">The value name in the key</param>
  46.         /// <returns>The value of the value name inside the key</returns>
  47.         public string GetValue(string Key, string ValueName)
  48.         {
  49.             System.Collections.Hashtable KeyTable = (System.Collections.Hashtable)Keys[Key];
  50.             if (KeyTable != null)
  51.             {
  52.                 if (KeyTable.ContainsKey(ValueName))
  53.                 {
  54.                     return (string)KeyTable[ValueName];
  55.                 }
  56.                 else
  57.                 {
  58.                     throw new Exceptions.ValueDoesntExistException();
  59.                 }
  60.             }
  61.             else
  62.             {
  63.                 throw new Exceptions.KeyDoesntExistException();
  64.             }
  65.         }
  66.         /// <summary>
  67.         /// Get a value from ValueName without a key
  68.         /// </summary>
  69.         /// <param name="ValueName">The valuename to get from</param>
  70.         /// <returns>The value of the value name</returns>
  71.         public string GetValue(string ValueName)
  72.         {
  73.             if (Values.ContainsKey(ValueName))
  74.             {
  75.                 return (string)Values[ValueName];
  76.             }
  77.             else
  78.             {
  79.                 throw new Exceptions.ValueDoesntExistException();
  80.             }
  81.         }
  82.         /// <summary>
  83.         /// Checks if a spesified key is in the class
  84.         /// </summary>
  85.         /// <param name="KeyName">The name of the key</param>
  86.         /// <returns>Whatever the key exists or not</returns>
  87.         bool KeyExists(string KeyName)
  88.         {
  89.             return Keys.Contains(KeyName);
  90.         }
  91.         /// <summary>
  92.         /// Checks if a value exists in the class
  93.         /// </summary>
  94.         /// <param name="KeyName">The name of the key, the key must exists</param>
  95.         /// <param name="ValueName">The name of the value to check</param>
  96.         /// <returns>Whatever the value exists in the key or not</returns>
  97.         bool ValueExists(string KeyName, string ValueName)
  98.         {
  99.             System.Collections.Hashtable KeyTable = (System.Collections.Hashtable)Keys[KeyName];
  100.             if (KeyTable != null)
  101.             {
  102.                 return KeyTable.Contains(ValueName);
  103.             }
  104.             else
  105.             {
  106.                 throw new Exceptions.KeyDoesntExistException();
  107.             }
  108.         }
  109.         /// <summary>
  110.         /// Checks if a value exists in the class
  111.         /// </summary>
  112.         /// <param name="ValueName">Name of the kye to check</param>
  113.         /// <returns>Whatever the value exists or not</returns>
  114.         bool ValueExists(string ValueName)
  115.         {
  116.             return Values.Contains(ValueName);
  117.         }
  118.         /// <summary>
  119.         /// Set a value in the configuration data
  120.         /// </summary>
  121.         /// <param name="Key">Must already exist</param>
  122.         /// <param name="ValueName">Doesn't have to exist before calling this function</param>
  123.         /// <param name="Value">The value that will be stored in ValueName</param>
  124.         public void SetValue(string Key, string ValueName, string Value)
  125.         {
  126.             System.Collections.Hashtable KeyTable = (System.Collections.Hashtable)Keys[Key];
  127.             if (KeyTable != null)
  128.             {
  129.                 KeyTable[ValueName] = Value;
  130.             }
  131.             else
  132.             {
  133.                 throw new Exceptions.KeyDoesntExistException();
  134.             }
  135.         }
  136.         /// <summary>
  137.         /// Set a value in the configuration data without the need for a key
  138.         /// </summary>
  139.         /// <param name="ValueName">Doesn't have to exist before-hand</param>
  140.         /// <param name="Value">The value that will be stored in ValueName</param>
  141.         public void SetValue(string ValueName, string Value)
  142.         {
  143.             Values[ValueName] = Value;
  144.         }
  145.         /// <summary>
  146.         /// Add a key to the class, attempts to add a key already existing are ignored.
  147.         /// </summary>
  148.         /// <param name="NewKey">The new key name</param>
  149.         public void AddKey(string NewKey)
  150.         {
  151.             System.Collections.Hashtable New = new System.Collections.Hashtable();
  152.             Keys[NewKey] = New;
  153.         }
  154.         /// <summary>
  155.         /// Saves the class data in the form of INI file into the TextWriter
  156.         /// </summary>
  157.         /// <param name="sw">The destination for the output</param>
  158.         public void Save(System.IO.TextWriter sw)
  159.         {
  160.             System.Collections.IDictionaryEnumerator Enumerator = Values.GetEnumerator();
  161.             //Print values
  162.             sw.WriteLine("; The values in this group" );
  163.             while (Enumerator.MoveNext())
  164.             {
  165.                 sw.WriteLine("{0} = {1}", Enumerator.Key, Enumerator.Value);
  166.             }
  167.             sw.WriteLine("; This is where the keys begins" );
  168.             Enumerator = Keys.GetEnumerator();
  169.             while (Enumerator.MoveNext())
  170.             {
  171.                 System.Collections.IDictionaryEnumerator Enumerator2nd = ((System.Collections.Hashtable)Enumerator.Value).GetEnumerator();
  172.                 sw.WriteLine("[{0}]", Enumerator.Key);
  173.                 while (Enumerator2nd.MoveNext())
  174.                 {
  175.                     sw.WriteLine("{0} = {1}", Enumerator2nd.Key, Enumerator2nd.Value);
  176.                 }
  177.             }
  178.         }
  179.         /// <summary>
  180.         /// This private method Parse the input and sort it properly in the class
  181.         /// for later retrival.
  182.         /// </summary>
  183.         /// <param name="sr">an already initialize StreamReader</param>
  184.         private void Parse(System.IO.TextReader sr)
  185.         {
  186.             System.Collections.Hashtable CurrentKey = null;
  187.             string Line, ValueName, Value;
  188.             while (null != (Line = sr.ReadLine()))
  189.             {
  190.                 int j, i = 0;
  191.                 while (Line.Length > i && Char.IsWhiteSpace(Line, i)) i++;//skip white space in beginning of line
  192.                 if (Line.Length <= i)
  193.                     continue;
  194.                 if (Line[i] == ';')//Comment
  195.                     continue;
  196.                 if (Line[i] == '[')//Start new Key
  197.                 {
  198.                     string KeyName;
  199.                     j = Line.IndexOf(']', i);
  200.                     if (j == -1)//last ']' not found
  201.                         throw new Exceptions.InvalidInputException();
  202.                     KeyName = Line.Substring(i + 1, j - i - 1).Trim();
  203.                     if (!Keys.ContainsKey(KeyName))
  204.                     {
  205.                         this.AddKey(KeyName);
  206.                     }
  207.                     CurrentKey = (System.Collections.Hashtable)Keys[KeyName];
  208.                     while (Line.Length > ++j && Char.IsWhiteSpace(Line, j)) ;//skip white space in beginning of line
  209.                     if (Line.Length > j)
  210.                     {
  211.                         if (Line[j] != ';')//Anything but a comment is unacceptable after a key name
  212.                             throw new Exceptions.InvalidInputException();
  213.                     }
  214.                     continue;
  215.                 }
  216.                 //Start of a value name, ends with a '='
  217.                 j = Line.IndexOf('=', i);
  218.                 if (j == -1)
  219.                     throw new Exceptions.InvalidInputException();
  220.                 ValueName = Line.Substring(i, j - i).Trim();
  221.                 if ((i = Line.IndexOf(';', j + 1)) != -1)//remove comments from end of line
  222.                     Value = Line.Substring(j + 1, i - (j + 1)).Trim();
  223.                 else
  224.                     Value = Line.Substring(j + 1).Trim();
  225.                 if (CurrentKey != null)
  226.                 {
  227.                     CurrentKey[ValueName] = Value;
  228.                 }
  229.                 else
  230.                 {
  231.                     Values[ValueName] = Value;
  232.                 }
  233.             }
  234.         }
  235.     }
  236. }

Reply

Marsh Posté le 31-01-2007 à 21:38:07    

mais quel est l'intéret ? Tout ca est deja géré nativement par le framework avec ConfigurationManager...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed