C#/c#

[ c# ] ini 파일 읽어오는 법 2가지

code094 2022. 12. 22. 19:43

리눅스 서비스에서 ini 파일 읽을 때 

var parser = new FileIniDataParser();
IniData data = parser.ReadFile("./setting.ini");
string host = data["DataBase"]["host"];
string user = data["DataBase"]["user "];
string password = data["DataBase"]["password"];
string dbname = data["DataBase"]["Database_name"];
string port = data["DataBase"]["port"];

sqlConnector = "Server=" + host + ";User ID=" + user + ";Password=" + password + ";Database=" + dbname + ";Port=" + port;

 

윈도우에 클라이언트에서 ini 파일 읽을 때 

[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);

readonly string iniPath;
public IniReaderHelper() // 생성자
        {
            string AppDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\settings";

            if (Directory.Exists(AppDataFolder))
            {
                System.IO.Directory.CreateDirectory(AppDataFolder);
            }
            var Path = AppDataFolder + "\\setting.ini";
            iniPath = Path;

        }

public string GetDBconnectionString()
        {
        Retry:
            StringBuilder ip = new StringBuilder();
            StringBuilder user = new StringBuilder();
            StringBuilder password = new StringBuilder();
            StringBuilder port = new StringBuilder();
            StringBuilder name = new StringBuilder();

            GetPrivateProfileString("DataBase", "ip", "(NONE)", ip, 32, iniPath);
            GetPrivateProfileString("DataBase", "user", "(NONE)", user, 32, iniPath);
            GetPrivateProfileString("DataBase", "password", "(NONE)", password, 32, iniPath);
            GetPrivateProfileString("DataBase", "port", "(NONE)", port, 32, iniPath);
            GetPrivateProfileString("DataBase", "name", "(NONE)", name, 32, iniPath);

            if (ip.ToString() == "(NONE)" || user.ToString() == "(NONE)" || password.ToString() == "(NONE)" || port.ToString() =="(NONE)" || name.ToString() =="(NONE)")
            {
                if (SetConnectionString()) // 데이터 없으면 기본값으로 설정  
                    goto Retry;
                else
                {
                    App.Current.MainWindow.Close();

                    return "cancel";
                }
            }

            return "Server=" + ip + ";User=" + user + ";Password=" + password + ";Database=" + name + ";Port=" + port;
        }

필요한 곳에서 string DBString = GetDBconnectionString();