using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; namespace INI.IniFiles { /* 参考:INIファイルを読み書きするには? * https://www.atmarkit.co.jp/fdotnet/dotnettips/039inifile/inifile.html */ class IniFiles { [DllImport("KERNEL32.DLL")] private static extern uint GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL")] private static extern uint GetPrivateProfileInt( string lpAppName, string lpKeyName, int nDefault, string lpFileName); [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")] public static extern uint GetPrivateProfileStringByByteArray( string lpAppName, string lpKeyName, string lpDefault, byte[] lpReturnedString, uint nSize, string lpFileName ); [DllImport("KERNEL32.DLL")] private static extern uint WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName); //******************************************* // GetIniString // //******************************************* /// <summary> /// INIファイルから値を取得する /// </summary> /// <param name="lpSection">セッション名称 /// <param name="lpKeyName">キー名称 /// <param name="lpFileName">INIファイル名 /// <returns></returns> public static string GetIniString(string lpSection, string lpKeyName, string lpFileName) { System.Text.StringBuilder sb = new System.Text.StringBuilder(1024); uint sLen = GetPrivateProfileString(lpSection, lpKeyName, "", sb, (uint)sb.Capacity, lpFileName); return sb.ToString(); } //******************************************* // GetPrivateProfileInt // //******************************************* /// <summary> /// /// </summary> /// <param name="lpSection"> /// <param name="lpKeyName"> /// <param name="lpFileName"> /// <returns></returns> public static uint GetIniValue(string lpSection, string lpKeyName, string lpFileName) { // 整数値を読み出す uint resultValue= GetPrivateProfileInt(lpSection, lpKeyName, 0, lpFileName); return resultValue; } //******************************************* // WritePrivateProfileString // //******************************************* /// <summary> /// INIファイルに値を書き込む /// </summary> /// <param name="lpSection">セッション名称 /// <param name="lpKeyName">キー名称 /// <param name="lpValue">セットする値 /// <param name="lpFileName">INIファイル名 /// <returns></returns> public static bool SetIniString(string lpSection, string lpKeyName, string lpValue, string lpFileName) { long result = WritePrivateProfileString(lpSection, lpKeyName, lpValue, lpFileName); return result != 0; } /// <summary> /// /// </summary> /// <param name="lpSection"> /// <param name="lpKeyName"> /// <param name="lpFileName"> public static void DelKeyAndData_pair(string lpSection, string lpKeyName, string lpFileName) { // 1つのキーと値のペアを削除する WritePrivateProfileString(lpSection, lpKeyName, null, lpFileName); } /// <summary> /// /// </summary> /// <param name="lpSection"> /// <param name="lpFileName"> public static void DelKeyAndData_all(string lpSection, string lpFileName) { // 指定セクション内の全てのキーと値のペアを削除する WritePrivateProfileString(lpSection, null, null, lpFileName); } //******************************************* // GetPrivateProfileStringByByteArray // //******************************************* /// <summary> /// キーリスト /// </summary> /// <param name="lpSection"> /// <param name="lpFileName"> /// <returns></returns> public static string[] GetKeys(string lpSection, string lpFileName) { byte[] ar1 = new byte[1024]; uint resultSize1= GetPrivateProfileStringByByteArray(lpSection, null, "", ar1,(uint)ar1.Length, lpFileName); string result1 = Encoding.Default.GetString(ar1, 0, (int)resultSize1 - 1); string[] keys = result1.Split('\0'); return keys; } /// <summary> /// セクションの一覧 /// </summary> /// <param name="lpFileName"> /// <returns></returns> public static string[] GeSections(string lpFileName) { // 指定ファイルのセクションの一覧を得る byte[] ar2 = new byte[1024]; uint resultSize2 = GetPrivateProfileStringByByteArray(null, null, "", ar2, (uint)ar2.Length, lpFileName); string result2 = System.Text.Encoding.Default.GetString(ar2, 0, (int)resultSize2 - 1); string[] sections = result2.Split('\0'); return sections; } } } ------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace INI.IniFiles { class IniProc { public static void Proc() { string FilePath = @"C:\MyFile.ini"; //string s = IniFiles.GetIniString("Section1", "KEY1", FilePath); IniFiles.SetIniString("Section1", "KEY1", "AAAA", FilePath); IniFiles.SetIniString("Section1", "KEY2", "BBBB", FilePath); IniFiles.SetIniString("Section1", "KEY3", "1", FilePath); IniFiles.SetIniString("Section2", "KEY2", "AAAA", FilePath); IniFiles.SetIniString("Section3", "KEY3", "AAAA", FilePath); //----------------------- // 文字列を読み出す //----------------------- StringBuilder sb = new StringBuilder(1024); string sSection = "Section1"; string sKey = "KEY1"; string sRes = IniFiles.GetIniString(sSection, sKey, FilePath); Console.WriteLine("{0}に含まれる{1}の数値: {2}", sSection,sKey, sRes); //----------------------- // 数値を読み出す //----------------------- sSection = "Section1"; sKey = "KEY3"; uint uiRes = IniFiles.GetIniValue(sSection, sKey, FilePath); Console.WriteLine("{0}に含まれる{1}の値: {2}", sSection, sKey, uiRes); //----------------------- // Sectionリスト //----------------------- string[] sections = IniFiles.GeSections(FilePath); foreach (string section in sections) { Console.WriteLine("このファイルに含まれるセクション名: {0}", section); } Console.WriteLine(""); //----------------------- // keyリスト //----------------------- sSection = "Section1"; string[] keys = IniFiles.GetKeys(sSection, FilePath); foreach (string key in keys) { Console.WriteLine( "{0}セクションに含まれるキー名: {1}", sSection,key); } Console.WriteLine(""); } } }