c#使用Windows API讀寫INI文件代碼

MiltonGetz 8年前發布 | 898 次閱讀 C# c# ini Windows

利用Windows API讀寫INI文件寫入時,如果沒有INI文件,自動創建INI;如果在創建時,GetLastError返回5,則檢查IniPath是否添加了文件名稱.ini

c#代碼

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace NameSpace
{
    /// <summary>
    /// 利用Windows API讀寫INI文件
    /// 寫入時,如果沒有INI文件,自動創建INI
    /// 如果在創建時,GetLastError:5 檢查IniPath是否添加了文件名稱.ini
    /// </summary>
    public class INI
    {
        //聲明kernel32.dll函數
        [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);
        //
        [DllImport("kernel32")]
        public static extern uint GetLastError();

        string IniPath = null;

        /// <summary>
        /// 構造方法
        /// </summary>
        /// <param name="INIPath">INI文件的絕對路徑,后面不需要斜杠</param>
        /// <param name="INIFileName">INI文件名稱使用時不需要斜杠,需要.ini</param>
        public INI(string INIPath,string INIFileName)
        {
            Console.WriteLine("INI Object building");
            IniPath = INIPath + "\\" + INIFileName;
            Console.WriteLine("INIFilePath :" + IniPath);
        }

        /// <summary>
        /// 寫入INI文件
        /// </summary>
        /// <param name="Section">Section</param>
        /// <param name="Key">Key</param>
        /// <param name="Value">Value</param>
        public void IniWriteValue(string Section, string Key, string Value)
        {
            Console.WriteLine("---IniWriteValue---");
            Console.WriteLine("Section :" + Section);
            Console.WriteLine("Key :" + Key);
            Console.WriteLine("Value :" + Value);
            Console.WriteLine("IniPath :" + IniPath);
            UInt32 Snapshot = GetLastError();
            //
            WritePrivateProfileString(Section, Key, Value, IniPath);
            if (Snapshot != GetLastError())
            {
                Console.WriteLine("GetLastError :" + GetLastError());
            }
        }

        /// <summary>
        /// 讀出INI文件
        /// </summary>
        /// <param name="Section">Section</param>
        /// <param name="Key">Key</param>
        public string IniReadValue(string Section, string Key)
        {
            StringBuilder result = new StringBuilder(256);
            GetPrivateProfileString(Section, Key, null, result, 256, IniPath);
            return result.ToString();
        }

        public bool ExistINIFile()
        {
            return File.Exists(IniPath);
        }

        /// <summary>
        /// creat config file to application ini
        /// </summary>
        /// <param name="dnf_path"></param>
        public void CreateConfig(string IP)
        {
            Console.WriteLine("CreateConfig");
            Console.WriteLine("IP:" + IP);
            try
            {
                WriteConfigIP(IP);

                if (ExistINIFile())
                {
                    Console.WriteLine("配置文件創建成功");
                }
                else
                {
                    Console.WriteLine("配置文件創建不成功");
                }
            }
            catch (Exception err)
            {
                Console.WriteLine("出錯信息:" + err.ToString());
            }
        }

        /// <summary>
        /// write config for ip information
        /// </summary>
        /// <param name="IP"></param>
        public void WriteConfigIP(string IP)
        {
            string Section = "Config";
            string Key = "IP";
            string Value = IP;
            try
            {
                IniWriteValue(Section, Key, Value);
            }
            catch (Exception err)
            {
                Console.WriteLine("出錯信息:" + err.ToString());
            }
        }

        public string ReadConfigIP()
        {
            try
            {
                string Section = "Config";
                string result = IniReadValue(Section, "IP");
                Console.WriteLine("ReadConfigIP Result :" + result);
                return result;
            }
            catch (Exception err)
            {
                Console.WriteLine("出錯信息:" + err.ToString());
                return "Read Error";
            }
        }

    }
}
 本文由用戶 MiltonGetz 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!