泰仔在線

          java學習,心情日記,繽紛時刻
          posts - 100, comments - 34, trackbacks - 0, articles - 0

          C#中處理INI文件的類

          Posted on 2009-03-04 10:47 泰仔在線 閱讀(511) 評論(0)  編輯  收藏 所屬分類: .NET相關
          using System;
          using System.Collections.Generic;
          using System.Text;

          namespace Test.Modules
          {
              
          public abstract class CustomIniFile
              
          {
                  
          public CustomIniFile(string AFileName)
                  
          {
                      FFileName 
          = AFileName;
                  }

                  
          private string FFileName;
                  
          public string FileName
                  
          {
                      
          get return FFileName; }
                  }

                  
          public virtual bool SectionExists(string Section)
                  
          {
                      List
          <string> vStrings = new List<string>();
                      ReadSections(vStrings);
                      
          return vStrings.Contains(Section);
                  }

                  
          public virtual bool ValueExists(string Section, string Ident)
                  
          {
                      List
          <string> vStrings = new List<string>();
                      ReadSection(Section, vStrings);
                      
          return vStrings.Contains(Ident);
                  }

                  
          public abstract string ReadString(string Section, string Ident, string Default);
                  
          public abstract bool WriteString(string Section, string Ident, string Value);
                  
          public abstract bool ReadSectionValues(string Section, List<string> Strings);
                  
          public abstract bool ReadSection(string Section, List<string> Strings);
                  
          public abstract bool ReadSections(List<string> Strings);
                  
          public abstract bool EraseSection(string Section);
                  
          public abstract bool DeleteKey(string Section, string Ident);
                  
          public abstract bool UpdateFile();
              }

              
          /// <summary>
              
          /// 存儲本地INI文件的類。
              
          /// </summary>

              public class IniFile : CustomIniFile
              
          {
                  [DllImport(
          "kernel32")]
                  
          private static extern uint GetPrivateProfileString(
                      
          string lpAppName, // points to section name
                      string lpKeyName, // points to key name
                      string lpDefault, // points to default string
                      byte[] lpReturnedString, // points to destination buffer
                      uint nSize, // size of destination buffer
                      string lpFileName  // points to initialization filename
                  );
                  [DllImport(
          "kernel32")]
                  
          private static extern bool WritePrivateProfileString(
                      
          string lpAppName, // pointer to section name
                      string lpKeyName, // pointer to key name
                      string lpString, // pointer to string to add
                      string lpFileName  // pointer to initialization filename
                  );
                  
          /// <summary>
                  
          /// 構造IniFile實例。
                  
          /// <param name="AFileName">指定文件名</param>
                  
          /// </summary>

                  public IniFile(string AFileName)
                      : 
          base(AFileName)
                  
          {
                  }

                  
          /// <summary>
                  
          /// 析夠IniFile實例。
                  
          /// </summary>

                  ~IniFile()
                  
          {
                      UpdateFile();
                  }

                  
          /// <summary>
                  
          /// 讀取字符串值。
                  
          /// <param name="Ident">指定變量標識。</param>
                  
          /// <param name="Section">指定所在區域。</param>
                  
          /// <param name="Default">指定默認值。</param>
                  
          /// <returns>返回讀取的字符串。如果讀取失敗則返回該值。</returns>
                  
          /// </summary>

                  public override string ReadString(string Section, string Ident, string Default)
                  
          {
                      
          byte[] vBuffer = new byte[2048];
                      
          uint vCount = GetPrivateProfileString(Section,
                          Ident, Default, vBuffer, (
          uint)vBuffer.Length, FileName);
                      
          return Encoding.Default.GetString(vBuffer, 0, (int)vCount);
                  }

                  
          /// <summary>
                  
          /// 寫入字符串值。
                  
          /// </summary>
                  
          /// <param name="Section">指定所在區域。</param>
                  
          /// <param name="Ident">指定變量標識。</param>
                  
          /// <param name="Value">所要寫入的變量值。</param>
                  
          /// <returns>返回寫入是否成功。</returns>

                  public override bool WriteString(string Section, string Ident, string Value)
                  
          {
                      
          return WritePrivateProfileString(Section, Ident, Value, FileName);
                  }

                  
          /// <summary>
                  
          /// 獲得區域的完整文本。(變量名=值格式)。
                  
          /// </summary>
                  
          /// <param name="Section">指定區域標識。</param>
                  
          /// <param name="Strings">輸出處理結果。</param>
                  
          /// <returns>返回讀取是否成功。</returns>

                  public override bool ReadSectionValues(string Section, List<string> Strings)
                  
          {
                      List
          <string> vIdentList = new List<string>();
                      
          if (!ReadSection(Section, vIdentList)) return false;
                      
          foreach (string vIdent in vIdentList)
                          Strings.Add(
          string.Format("{0}={1}", vIdent, ReadString(Section, vIdent, "")));
                      
          return true;
                  }

                  
          /// <summary>
                  
          /// 讀取區域變量名列表。
                  
          /// </summary>
                  
          /// <param name="Section">指定區域名。</param>
                  
          /// <param name="Strings">指定輸出列表。</param>
                  
          /// <returns>返回獲取是否成功。</returns>

                  public override bool ReadSection(string Section, List<string> Strings)
                  
          {
                      
          byte[] vBuffer = new byte[16384];
                      
          uint vLength = GetPrivateProfileString(Section, nullnull, vBuffer,
                          (
          uint)vBuffer.Length, FileName);
                      
          int j = 0;
                      
          for (int i = 0; i < vLength; i++)
                          
          if (vBuffer[i] == 0)
                          
          {
                              Strings.Add(Encoding.Default.GetString(vBuffer, j, i 
          - j));
                              j 
          = i + 1;
                          }

                      
          return true;
                  }

                  
          /// <summary>
                  
          /// 讀取區域名列表。
                  
          /// </summary>
                  
          /// <param name="Strings">指定輸出列表。</param>
                  
          /// <returns></returns>

                  public override bool ReadSections(List<string> Strings)
                  
          {
                      
          byte[] vBuffer = new byte[16384];
                      
          uint vLength = GetPrivateProfileString(nullnullnull, vBuffer,
                          (
          uint)vBuffer.Length, FileName);
                      
          int j = 0;
                      
          for (int i = 0; i < vLength; i++)
                          
          if (vBuffer[i] == 0)
                          
          {
                              Strings.Add(Encoding.Default.GetString(vBuffer, j, i 
          - j));
                              j 
          = i + 1;
                          }

                      
          return true;
                  }

                  
          /// <summary>
                  
          /// 刪除指定區域。
                  
          /// </summary>
                  
          /// <param name="Section">指定區域名。</param>
                  
          /// <returns>返回刪除是否成功。</returns>

                  public override bool EraseSection(string Section)
                  
          {
                      
          return WritePrivateProfileString(Section, nullnull, FileName);
                  }

                  
          /// <summary>
                  
          /// 刪除指定變量。
                  
          /// </summary>
                  
          /// <param name="Section">變量所在區域。</param>
                  
          /// <param name="Ident">變量標識。</param>
                  
          /// <returns>返回刪除是否成功。</returns>

                  public override bool DeleteKey(string Section, string Ident)
                  
          {
                      
          return WritePrivateProfileString(Section, Ident, null, FileName);
                  }

                  
          /// <summary>
                  
          /// 更新文件。
                  
          /// </summary>
                  
          /// <returns>返回更新是否成功。</returns>

                  public override bool UpdateFile()
                  
          {
                      
          return WritePrivateProfileString(nullnullnull, FileName);
                  }

              }

          }

          轉自:C#中處理INI文件的類
          主站蜘蛛池模板: 剑河县| 连南| 独山县| 中山市| 瓦房店市| 潼关县| 出国| 慈溪市| 北流市| 阳朔县| 嘉禾县| 绿春县| 钦州市| 定日县| 静乐县| 阿荣旗| 天峻县| 禄劝| 平凉市| 柞水县| 鄢陵县| 兴安盟| 嵩明县| 肥东县| 竹北市| 游戏| 尉氏县| 辽阳市| 苍溪县| 古交市| 寻乌县| 石泉县| 迁安市| 信丰县| 竹溪县| 渑池县| 凭祥市| 甘谷县| 洛川县| 曲靖市| 安顺市|