C#利用Windows API讀寫INI文件

n342 9年前發布 | 993 次閱讀 C#

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

 
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";
        }
    }

}

}

</pre>

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