using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.IO; namespace ITC81DB { public class IniFile { [DllImport("KERNEL32.DLL")] private static extern bool WritePrivateProfileString(string IpAppName, string IpKeyName, string IpString, string IpFileName); [DllImport("KERNEL32.DLL")] private static extern uint GetPrivateProfileInt(string IpAppName, string IpKeyName, int nDefault, string IpFileName); [DllImport("KERNEL32.DLL")] static extern uint GetPrivateProfileString(string IpAppName, string IpKeyName, string IpDefault, StringBuilder IpReturnedString, int nSize, string IpFileName); /// /// Ini 파일 읽기 /// /// 값을 가져올 키가 속해있는 [섹션] 문자열 /// 값을 가져올 키 /// 해당되는 값이 없을 경우, 기본값으로 리턴할 문자열 /// 읽어올 ini 파일 경로 /// 실패 : "" 반환 public static string GetIni(String IpAppName, string IpKeyName, string IpDefault, string filePath) { string ret = ""; string iniFile = filePath; try { string readString = ""; string[] stringArray; using (StreamReader sr = new StreamReader(filePath, Encoding.Default)) { readString = sr.ReadToEnd(); sr.BaseStream.Position = 0; // Key값이 포함된 Line을 읽을 경우 if (readString.Contains(IpKeyName) == true) { int length; string[] text = readString.Split('\n'); for (int i = 0; i < text.Length; i++) text[i] = text[i].Trim(); for (int i = 0; i < text.Length; i++) { if (text[i].StartsWith(IpKeyName) == true) { stringArray = text[i].Split('='); ret = stringArray[stringArray.Length - 1]; break; } } sr.Close(); } } return ret; } catch (Exception ex) { return ""; } } /// /// Ini 파일 쓰기 /// /// 값을 입력할 키가 속해있는 [섹션] 문자열 /// 값을 입력할 키 /// 쓸 키 값 /// 쓸 ini 파일 경로 /// 성공 : true, 실패 : false public static Boolean SetIni(string IpAppName, string IpKeyName, string IpValue, string filePath) { try { string iniFile = filePath; string readString = ""; using (StreamReader sr = new StreamReader(filePath, Encoding.Default)) { readString = sr.ReadToEnd(); sr.BaseStream.Position = 0; // Key값이 포함된 Line을 읽을 경우 if (readString.Contains(IpKeyName) == true) { int length; string[] text = readString.Split('\n'); for (int i = 0; i < text.Length; i++) text[i] = text[i].Trim(); for (int i = 0; i < text.Length; i++) { if (text[i].StartsWith(IpKeyName) == true) { length = text[i].Length; int offset = readString.IndexOf(IpKeyName, 0); readString = readString.Remove(offset, length); readString = readString.Insert(offset, IpKeyName + "=" + IpValue); break; } } sr.Close(); File.Delete(filePath); StreamWriter sw = new StreamWriter(filePath, true, Encoding.Default); sw.Write(readString); sw.Close(); return true; } } return false; } catch { return false; } } /// /// Ini 파일 생성 /// /// Program명(ex. ITC81DB) /// Version(ex. 8.0.0) /// 릴리즈 날짜(ex. 2022.03.04) /// 성공 : true, 실패 : false public static Boolean CreateVersionIni(string programName, string version, string releaseDate) { try { string strCheckFolder = ""; strCheckFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\"; strCheckFolder += "Version.ini"; if (File.Exists(strCheckFolder) == false) { using (StreamWriter sw = new StreamWriter(strCheckFolder, true, Encoding.Default)) { sw.Write("[PROGRAMINFO]" + "\r\n"); sw.Write("NAME=" + programName + "\r\n"); sw.Write("VERSION=" + version + "\r\n"); sw.Write("RELEASE=" + releaseDate + "\r\n"); } } } catch { return false; } return true; } } }