[Win Form] C# Read INI File

  • 3044
  • 0

摘要:C# Read INI File


引用:http://www.dotblogs.com.tw/atowngit/archive/2009/09/01/10358.aspx
//TINI class      
      public class TINI : IDisposable
      {
         [DllImport("kernel32")]
         private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
         [DllImport("kernel32")]
         private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

         private bool bDisposed = false;
         private string _FilePath = string.Empty;
         public string FilePath
         {
            get
            {
               if (_FilePath == null)
                  return string.Empty;
               else
                  return _FilePath;
            }
            set
            {
               if (_FilePath != value)
                  _FilePath = value;
            }
         }

         /// 
         /// 建構子。
         /// 
         ///檔案路徑。      
         public TINI(string path)
         {
            _FilePath = path;
         }

         /// 
         /// 解構子。
         /// 
         ~TINI()
         {
            Dispose(false);
         }

         /// 
         /// 釋放資源(程式設計師呼叫)。
         /// 
         public void Dispose()
         {
            Dispose(true);
            GC.SuppressFinalize(this); //要求系統不要呼叫指定物件的完成項。
         }

         /// 
         /// 釋放資源(給系統呼叫的)。
         ///         
         protected virtual void Dispose(bool IsDisposing)
         {
            if (bDisposed)
            {
               return;
            }
            if (IsDisposing)
            {
               //補充:

               //這裡釋放具有實做 IDisposable 的物件(資源關閉或是 Dispose 等..)
               //ex: DataSet DS = new DataSet();
               //可在這邊 使用 DS.Dispose();
               //或是 DS = null;
               //或是釋放 自訂的物件。
               //因為我沒有這類的物件,故意留下這段 code ;若繼承這個類別,
               //可覆寫這個函式。
            }

            bDisposed = true;
         }


         /// 
         /// 設定 KeyValue 值。
         /// 
         ///Section。
         ///Key。
         ///Value。
         public void setKeyValue(string IN_Section, string IN_Key, string IN_Value)
         {
            WritePrivateProfileString(IN_Section, IN_Key, IN_Value, this._FilePath);
         }

         /// 
         /// 取得 Key 相對的 Value 值。
         /// 
         ///Section。
         ///Key。        
         public string getKeyValue(string IN_Section, string IN_Key)
         {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(IN_Section, IN_Key, "", temp, 255, this._FilePath);
            return temp.ToString();
         }



         /// 
         /// 取得 Key 相對的 Value 值,若沒有則使用預設值(DefaultValue)。
         /// 
         ///Section。
         ///Key。
         ///DefaultValue。        
         public string getKeyValue(string Section, string Key, string DefaultValue)
         {
            StringBuilder sbResult = null;
            try
            {
               sbResult = new StringBuilder(255);
               GetPrivateProfileString(Section, Key, "", sbResult, 255, this._FilePath);
               return (sbResult.Length > 0) ? sbResult.ToString() : DefaultValue;
            }
            catch
            {
               return string.Empty;
            }
         }
      } 

         //取得INI
         using (TINI oTINI = new TINI(Path.Combine(Application.StartupPath, "TradeCfgV3_01025.ini")))
         {
             s_Data2 = oTINI.getKeyValue("SYSTEM", "HospID"); //SYSTEM: Section;HospID:Key
         }