자주 변경되는 값들은 .ini 파일에 저장해두고 관리한다. 예를들어, 스크래핑 하는 사이트의 자주 변경되는 xPath 라든지, 공인인증서의 id, pw 라든지. PC별 식별 ID 등을 말이다. 이번 글에서는 그렇게 만든 ini 파일을 C# 프로그램 상에서 어떻게 찾아서 읽어 오는지 정리하려고 한다.
1. INI 파일 경로 찾는 방법
string path = Assembly.GetExecutingAssembly().Location;
path = Path.GetDirectoryName(path);
CommonData.PathINI = path + "\\Info.ini";
- 현재 실행중인 Assembly(실행파일)의 경로에서 파일명을 제거한 뒤, 해당 폴더 기준으로 Info.ini 경로를 구성해 pathINI에 저장한다.
2. INI 파일에서 값 읽어 오기
StringBuilder sb = new StringBuilder(256, 256);
string empty = string.Empty;
if (File.Exists(CommonData.PathINI))
{
IniInfo.GetPrivateProfileString("UserInfo", "LoginID", empty, sb, 256, CommonData.PathINI);
CommonData.LoginID = sb.ToString();
sb.Remove(0, sb.Length);
IniInfo.GetPrivateProfileString("ProgramInfo", "WorkCd", empty, sb, 256, CommonData.PathINI);
CommonData.WorkCd = sb.ToString();
sb.Remove(0, sb.Length);
}
GetPrivateProfileString은 반환값을 직접 리턴하는 방식이 아니라, 결과 문자열을 StringBuilder 버퍼에 채워 넣는 방식이기 때문에 위와 같이 sb 선언해준다. 버퍼 크기의 의미인 256은 매우 흔하게 사용되고, 처리 효율과 범용성을 고려해 자주 쓰인다고 함.
File.Exists(CommonData.PathINI) 파일 존재 유무 확인 후 파일이 존재하면 코드 실행을 한다.
사용한 sb 버퍼는 Remove로 초기화한 뒤 재사용함으로써, 불필요한 객체 생성을 줄인다.
- 왜 GetPrivateProfileString의 반환값을 뱉어 내는 것이 아니라 버퍼를 사용하는지 궁금하다면 아래 글 참고 하시오..
[C#] 왜 StringBuilder를 사용할까? – 출력 버퍼 방식의 이유와 장단점
[C#] .ini 파일 읽기 - GetPrivateProfileString 사용법자주 변경되는 값들은 .ini 파일에 저장해두고 관리한다. 예를들어, 스크래핑 하는 사이트의 자주 변경되는 xPath 라든지, 공인인증서의 id, pw 라든지. P
120ne.xyz
[ GetPrivateProfileString API 사용법 ]
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileString(
string lpAppName, // 섹션 이름
string lpKeyName, // 키 이름
string lpDefault, // 키 없을 때 반환값
StringBuilder lpReturnedString, // 결과를 받을 StringBuilder 버퍼
int nSize, // 버퍼 크기
string lpFileName // INI 파일 전체 경로
);
하......~~~ C# 졸라 재미 없잔슴~~~~!!!!!!! 디버깅 시간이 너무 오래 걸려서 하기가 싫어 죽겠슴 왤케 무거운거임 짱나게........ 그래도 담달까지만 고생하면 되니까 잘 참아보자....
'개발일지 > C#' 카테고리의 다른 글
[ VS2022 / C# / Git ] 프로젝트 정리 1 - 깃 설치 후 Visual Studio 2022 깃 연결 (3) | 2025.06.06 |
---|---|
[C#] Random.Next()로 1/5 확률 선택하기 – 퍼센트(%) 조건 제어 (0) | 2025.05.28 |
[C#] 클린코드 - SQL 문자열 가독성 개선하기 (0) | 2025.05.28 |
[C# × WinAPI] 반환값이 아닌 출력 버퍼를 사용하는 이유? (0) | 2025.05.26 |
[C#] WebDriverManager - 크롤링 프로그램 제작시 chromedriver 자동 설치 (0) | 2025.05.02 |