Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
Archives
- Today
- Total
기록
[VCL] INI 파일 다루기 : 파일 쓰기(1) 본문
소개
INI 파일은 설정 정보를 저장하는 간단한 텍스트 파일 포맷으로, 애플리케이션의 환경 설정을 저장하는 데 많이 사용됩니다. 이번 포스팅에서는 C++ Builder를 사용하여 INI 파일을 읽고 쓰는 방법을 알아보겠습니다.
예제 코드
아래는 C++ Builder에서 INI 파일을 생성하고 데이터를 쓰는 간단한 예제입니다.
#include <vcl.h>
#include <System.IniFiles.hpp>
#include <System.IOUtils.hpp>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
UnicodeString strFolderPath = edtFilePath->Text; // 사용자 입력값을 가져옴
// 경로 유효성 체크
if (!TDirectory::Exists(strFolderPath)) {
ShowMessage("유효하지 않은 폴더 경로입니다.");
return;
}
UnicodeString strFilePath = TPath::Combine(strFolderPath, "sample.ini");
TIniFile* pIniFile = new TIniFile(strFilePath);
try {
UnicodeString strSection = "Settings";
// INI 파일에 값 쓰기
pIniFile->WriteBool(strSection, "testFalse", false);
pIniFile->WriteBool(strSection, "testTrue", true);
pIniFile->WriteDate(strSection, "testDate", TDateTime::CurrentDateTime());
pIniFile->WriteDateTime(strSection, "testDateTime", TDateTime::CurrentDateTime());
pIniFile->WriteTime(strSection, "testTime", TDateTime::CurrentDateTime());
pIniFile->WriteFloat(strSection, "testFloat", 2.13111999999999999999999); //반올림처리됨.
ShowMessage("INI 파일이 성공적으로 저장되었습니다.");
} catch (const Exception &e) {
ShowMessage("오류 발생: " + e.Message);
}
delete pIniFile; // 항상 메모리 해제
}
//---------------------------------------------------------------------------
Process
1. UI 구성하기
(1) TButton 컴포넌트를 하나 만들고 Name을 btnSave로 지정한다.
(2) TEdit 컴포넌트를 하나 만들고 Name을 edtFilePath로 지정한다.
2. btnSave 버튼을 더블클릭해서 onClick 이벤트를 작성한다.
(1) edtFilePath 입력박스에서 사용자 입력값을 가지고 온다.
(2) 해당 경로가 유효한지 확인한다.
- 해당경로가 유효하지 않다면, 오류메세지를 보여주고 이후 단계를 진행하지 않는다.
- 해당경로가 유효하다면, (3)을 진행한다.
(3) 지정한 경로에 INI 파일을 생성하고, 섹션 및 키에 값을 저장한다. WriteString
및WriteInteger
메서드를 사용하여 데이터를 저장합니다.- 예외 처리를 통해 오류 발생 시 메시지를 표시한다.
3. 결과확인
마무리하면서
사용자가 직접 파일 위치를 입력하게 되면 파일 경로를 매번 찾아서 붙여넣어야 하는데, 이 과정이 너무나도 귀찮습니다.
이를 편하게 처리하기 위해서, 다음 포스팅에서는 사용자가 직접 폴더를 선택할 수 있도록 Dialog를 추가해보겠습니다. (2024.09.05 - [Desktop] - [C++ Builder] INI 파일 다루기: 파일 쓰기(2) - Dialog로 폴더 경로 가져오기)
- IniFiles VS TMemIniFile
INI 파일을 다루기 위해 C++ Builder에서는 TIniFile 클래스와 TMemIniFile 클래스를 사용할 수 있습니다. TIniFile 클래스는 INI 파일의 섹션 및 키에 대한 읽기 및 쓰기 작업을 간편하게 처리할 수 있도록 도와줍니다. 이 클래스는 파일 시스템에서 직접 INI 파일을 읽고 쓸 수 있기 때문에, 실제 파일을 손쉽게 수정하고 관리할 수 있습니다.
반면, TMemIniFile 클래스는 INI 파일의 내용을 메모리에 로드하여 작업을 수행합니다. 이 방식은 파일 시스템에 직접 접근하지 않고 메모리에서 데이터를 처리하므로, 여러 번의 읽기 및 쓰기 작업을 할 때 성능이 더 우수합니다. 즉, TMemIniFile을 사용하면 파일을 직접 수정하는 대신 메모리에서 먼저 작업을 수행하고, 필요할 때만 파일로 저장하는 방식입니다.
따라서, INI 파일을 사용할 때는 애플리케이션의 요구사항에 따라 TIniFile과 TMemIniFile 중 적절한 클래스를 선택하는 것이 중요합니다. TIniFile은 파일 시스템에서 직접 작업할 수 있는 반면, TMemIniFile은 더 빠른 성능을 제공합니다. - 메모리 해제
동적으로 할당된 메모리는 사용이 끝난 후 반드시 해제해야 합니다. C++에서는 delete 키워드를 사용하여 메모리를 해제하는 것이 필요합니다. 이렇게 하지 않으면 메모리 누수가 발생할 수 있으므로, 항상 메모리 관리에 유의해야 합니다.
'Desktop' 카테고리의 다른 글
[VCL] 파일을 선택해서 읽어오기 (0) | 2025.02.03 |
---|---|
[VCL] INI 파일 다루기: 파일 쓰기(2) - Dialog로 폴더 경로 가져오기 (0) | 2025.01.27 |
[VCL] Hello world 어플리케이션 만들기 (0) | 2025.01.06 |
[VCL] TIP/RAD Studio에서 Editor Encoding 변경 (0) | 2024.10.21 |
[VCL] TIP/A component class named <name> already exists (0) | 2024.10.11 |
Comments