Windows의 대부분의 응용 프로그램에는 PowerBuilder, Office 및 Cstar와 같은 자체 초기화 파일이 있습니다. 따라서 초기화 파일을 읽고 쓰는 것은 모든 시니어 프로그래머가 마스터해야 하는 기술입니다. 초기화 파일을 읽고 쓰는 것은 객체를 사용하여 수행할 수도 있습니다. 파스칼의 텍스트 파일은 같은 방식으로 읽고 쓰지만, 초기화 파일이 일반 텍스트 파일과 다르기 때문에 고유한 형식을 가지고 있습니다. (아래 초기화 파일은 ucdos에서 제공하는 rdfnt.ini 파일 참조) 텍스트 파일을 사용하여 쓰기 형식 변환은 매우 지루할 뿐만 아니라 오류가 발생하기 쉽습니다. 프로그래머가 초기화 파일에서 데이터를 쉽게 읽고 쓸 수 있도록 Delphi는 사용자에게 초기화 파일을 사용하는 TIniFile 클래스를 제공합니다. 매우 편리하게 읽고 쓸 수 있습니다.
Ucdos의 rdfnt.ini 파일 내용은 다음과 같습니다.
[트루타입 글꼴 디렉토리]
디렉터리=C:WINDOWSSYSTEM
[트루타입 글꼴 목록]
ARIAL.TTF=64
ARIALBD.TTF=65
ARIALI.TTF=66
ARIALBI.TTF=67
TIMES.TTF=68
TIMESBD.TTF=69
TIMESI.TTF=70
TIMESBI.TTF=71
COUR.TTF=72
COURBD.TTF=73
COURI.TTF=74
쿠르비.TTF=75
[모든 트루타입 글꼴 사용]
모두=0
TiniFile 클래스는 Delphi 컴포넌트가 아니므로 Delphi의 VCL 템플릿에서 찾을 수 없습니다. 이는 Delphi 시스템의 inifiles 유닛에 정의되어 있으므로 TiniFile 클래스를 사용하려면 해당 유닛에서 Uses inifiles 지시어를 명시적으로 사용해야 합니다. 이 클래스를 사용하는 파일입니다.
TiniFile 클래스에는 많은 멤버 함수가 정의되어 있습니다. 다음은 자주 사용되는 멤버 함수입니다.
⑴생성()
함수는 다음과 같이 정의됩니다: constructor Create(const FileName: string);
이 함수는 TiniFile 클래스의 객체를 생성합니다. FileName 매개변수는 읽고 쓸 초기화 파일의 이름입니다.
읽고 쓸 파일이 Windows 디렉터리(예: system.ini 파일)에 있으면 경로를 지정하지 않고 파일 이름을 직접 쓰면 되고, 그렇지 않으면 경로를 지정해야 합니다(예: d:ucdos dfnt.ini ).
다음 규칙에 따라 지정된 디렉터리에 파일이 있으면 초기화 파일을 열고, 그렇지 않으면 지정된 디렉터리에 초기화 파일을 생성합니다.
⑵섹션 읽기()
프로세스는 다음과 같이 정의됩니다. PROcedure ReadSections(Strings: TStrings);
이 프로세스는 생성된 TiniFile 클래스 객체(즉, 이와 관련된 초기화 파일)에서 모든 노드 이름(즉, rdfnt.ini 파일의 [True Type 글꼴]과 같이 [] 괄호로 묶인 부분)을 읽습니다. list])는 문자열 목록에 저장됩니다. Strings 매개변수는 문자열 목록의 변수 이름입니다.
⑶ ReadSectionValues()
프로시저는 다음과 같이 정의됩니다: 프로시저 ReadSectionValues(const 섹션: 문자열; 문자열: TStrings);
이 프로세스는 매개변수 섹션의 값(예: rdfnt.ini 파일의 [True Type 글꼴 목록] 등)에 해당하는 노드의 각 키워드(예: ARIALBI.TTF)와 여기에 포함된 값(예: ARIALBI. TTF 키워드 값은 67)은 Strings 매개변수에 의해 지정된 문자열 목록으로 읽혀집니다.
⑷ 읽기섹션()
프로시저는 다음과 같이 정의됩니다: 프로시저 ReadSection(const 섹션: 문자열; 문자열: TStrings);
이 프로세스는 매개변수 섹션의 값에 해당하는 노드의 각 키워드를 매개변수 Strings에 의해 지정된 문자열 목록으로 읽어옵니다. ReadSectionValues()와의 차이점은 각 키워드의 해당 값을 읽지 않는다는 것입니다.
⑸ 문자열 읽기()
함수는 다음과 같이 정의됩니다. function ReadString(const Section, Ident, Default: string): string;
이 함수는 섹션 매개변수의 값이 있는 노드 이름과 Ident 매개변수의 값이 있는 키워드 이름(예: [트루타입 글꼴 목록] 섹션의 ARIALBI.TTF 키워드 값)에 해당하는 키워드 값을 반환합니다. 67)입니다. 지정된 노드 또는 섹션에 키워드가 없으면 함수는 매개변수 Default의 기본값을 반환합니다. 반환된 값은 문자열 데이터입니다.
지정된 노드의 키워드 값의 데이터 유형이 문자열이 아닌 경우 ReadInteger() 멤버 함수를 사용하여 정수 값을 읽고 ReadBool() 멤버 함수를 사용하여 부울 값을 읽을 수 있습니다.
⑹ 쓰기문자열()
프로시저는 다음과 같이 정의됩니다. 프로시저 WriteString(const Section, Ident, Value: string);
이 과정은 매개변수 Section의 값이 노드 이름이고 매개변수 Ident의 값이 키워드 이름인 키워드 값을 매개변수 Value의 값으로 설정하는 과정이다. 이 프로세스는 문자열 데이터를 설정합니다.
지정된 노드와 키워드가 모두 존재하는 경우 Value의 값은 원래 값을 대체하는 데 사용됩니다. 지정된 노드가 존재하지 않으면 노드가 연관된 초기화 파일에 자동으로 추가되고 노드의 값은 매개변수 섹션에 있고 A 키워드에는 노드 아래에 자동으로 추가됩니다. 키워드 이름은 매개변수 Ident의 값이고, 키워드에 해당하는 값은 노드가 존재하지만 키워드가 있는 경우에는 매개변수 Value의 값입니다. 존재하지 않는 경우 키워드 이름은 매개변수 Ident의 값이고, 이 키워드에 해당하는 값은 노드 아래에 자동으로 추가됩니다.
정수 값을 설정하려면 WriteInteger() 멤버 함수를 호출하고 WriteBool() 멤버 함수를 사용하여 부울 값을 설정합니다.
위 함수들의 기능을 알면 초기화 파일을 생성하거나 읽고 쓰는 것은 어렵지 않습니다. 다음은 실제 예를 사용하여 초기화 파일을 읽는 방법을 설명합니다.
⒈ 초기화 파일을 읽고 써야 하는 폼에 SectionComboBox와 IdentComboBox라는 두 개의 결합된 목록 상자를 배치합니다. SectionComboBox는 노드 이름을 저장하고 IdentComboBox는 선택한 노드의 키 이름을 저장합니다. IdentValueEdit라는 입력 상자는 해당 키워드의 값을 저장합니다. CmdChang이라는 수정 명령 버튼을 사용하여 키워드 값을 수정할 수 있습니다. 수정 후 CmdSave라는 저장 명령 버튼을 사용하여 수정된 키워드 값을 관련 초기화 파일에 저장합니다. 폼에 해당하는 유닛 이름은 IniUnit으로, 폼 이름은 IniForm으로 설정하고, 폼 레이아웃은 아래 그림 1과 같습니다.
⒉ IniUnit 유닛의 인터페이스 부분에서는 참조할 TiniFile 클래스에서 정의한 유닛 이름을 나타내기 위해 inifiles를 사용합니다. 그리고 변수 설명 부분에 TiniFile 클래스의 객체를 정의합니다.
var IniFile: 티니파일;
⒊ 양식의 OnCreate 이벤트 프로시저를 설정합니다. TIniFile 클래스의 Create 멤버 함수를 사용하여 TIniFile 개체를 만들고, 이 개체를 사용하여 d:ucdos 디렉터리의 rdfnt.ini 초기화 파일을 읽고 쓰고, 초기화 파일의 모든 노드를 SectionComboBox 조합 목록 상자로 읽습니다. ReadSections() 멤버 함수를 통해 ReadSection() 멤버 함수를 사용하여 첫 번째 노드의 모든 키워드를 IdentComboBox로 읽습니다. 결합된 목록 상자에서 ReadString() 멤버 함수를 사용하여 첫 번째 키워드의 값을 IdentValueEdit 입력 상자로 보냅니다.
⒋ SectionComboBox 결합 목록 상자의 OnChange 이벤트 프로세스를 생성합니다. 목록 상자에서 다른 항목(즉, 다른 노드 이름)을 선택할 때 ReadSection() 멤버 함수를 사용하여 선택한 노드의 모든 키워드를 IdentComboBox 결합 목록 상자로 읽고 ReadString() 멤버 함수를 사용하여 읽습니다. 첫 번째 키워드 값이 IdentValueEdit 입력 상자로 전송됩니다.
⒌ IdentComboBox 조합 목록 상자의 OnChange 이벤트 프로세스를 설정합니다. 목록 상자에서 다른 항목(즉, 다른 키워드 이름)을 선택할 때 ReadString() 멤버 함수를 사용하여 키워드 값을 IdentValueEdit 입력 상자로 보냅니다.
⒍ 명령버튼 CmdChang의 OnClick 이벤트 프로세스를 생성합니다. IdentValueEdit 입력 상자의 내용을 수정 가능하게 만들고(IdentValueEdit 입력 상자는 명령 단추를 누르지 않으면 수정할 수 없음) 명령 단추 CmdSave를 유효하게 설정하여 수정된 키워드 값이 관련 초기화 파일에 저장될 수 있도록 합니다.
⒎ 명령버튼 CmdSave의 OnClick 이벤트 프로세스를 생성합니다. 키워드 값이 변경된 경우 WriteString() 멤버 함수를 호출하여 수정된 키워드 값을 디스크에 저장합니다.
⒏ 폼의 OnDestroy 이벤트 프로시저를 생성합니다. 양식이 실패하면 생성된 TIniFile 개체가 해제되어 개체에서 사용하는 시스템 리소스가 해제됩니다.
이 시점에서는 프로젝트 실행 후 초기화 파일 읽기 및 쓰기가 원활하게 진행될 수 있습니다. 물론 EraseSection() 멤버 함수를 사용하여 지정된 섹션을 삭제할 수도 있고, DeleteKey() 멤버 함수를 사용하여 지정된 키워드를 삭제할 수도 있으므로 여기서는 자세히 소개하지 않겠습니다. 관심이 있으시면 Delphi 사용 도움말을 참조하세요.
다음은 이 장치의 소스 코드입니다.
단위 IniUnit;
인터페이스
용도
Windows, 메시지, SysUtils, 클래스, 그래픽, 컨트롤, 양식, 대화 상자,
StdCtrls, inifiles;
유형
TIniForm = 클래스(TForm)
섹션ComboBox: TComboBox;
라벨1: TLabel;
CmdSave: T버튼;
CmdChang: T버튼;
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
라벨2: TLabel;
라벨3: TLabel;
절차 FormCreate(보내는 사람: TObject);
프로시저 SectionComboBoxChange(Sender: TObject);
절차 FormDestroy(보내는 사람: TObject);
절차 CmdChangClick(보내는 사람: TObject);
절차 CmdSaveClick(Sender: TObject);
절차 IdentComboBoxChange(Sender: TObject);
사적인
{비공개 선언}
공공의
{공개 선언}
끝;
var
이니폼: TIniForm;
{Delphi의 TIniFile 클래스를 통해 Windows 초기화 파일 읽기 및 쓰기}
Ini파일: TIniFile;
구현
{$R *.DFM}
절차 TIniForm.FormCreate(Sender: TObject);
시작하다
{ TIniFile 클래스의 Create 멤버 함수를 사용하여 TIniFile 쌍을 만듭니다.
개체, 이 개체는 d:ucdos 디렉터리에 있는 rdfnt.ini 파일을 읽고 쓰는 데 사용됩니다.
읽고 쓰는 파일이 Windows 디렉터리(예: system.ini)에 있는 경우
경로를 지정하지 않고 파일 이름을 직접 작성할 수 있습니다.}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ TIniFile 객체와 관련된 초기화 파일 system.ini의 모든 내용
섹션이 포함된 섹션 이름(즉, [] 괄호로 묶인 부분)이 드롭다운 그룹으로 전송됩니다.
콤보 목록 상자 섹션ComboBox}
섹션ComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{system.ini 파일의 첫 번째 섹션 이름을 선택하세요.}
섹션ComboBox.ItemIndex:=0;
SectionComboBoxChange(발신자);
CmdSave.Enabled:=거짓;
끝;
{콤보 목록 상자 IniComboBox에서 선택한 섹션의 해당 항목
변수와 해당 값은 여러 줄 텍스트 편집기 IniMemo로 전송됩니다.}
절차 TIniForm.SectionComboBoxChange(Sender: TObject);
시작하다
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(발신자);
끝;
절차 TIniForm.IdentComboBoxChange(Sender: TObject);
시작하다
IdentValueEdit.Enabled:=거짓;
{선택한 키워드 값 읽기}
IdentValueEdit.Text:=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Text,');
끝;
절차 TIniForm.CmdChangClick(Sender: TObject);
시작하다
CmdSave.Enabled:=참;
IdentValueEdit.Enabled:=True;
IdentValueEdit.SetFocus;
끝;
절차 TIniForm.CmdSaveClick(Sender: TObject);
시작하다
IdentValueEdit.Modified인 경우 시작됩니다.
IniFile.WriteString(SectionComboBox.Text,
IdentComboBox.Text,
IdentValueEdit.Text);
끝;
IdentValueEdit.Enabled:=거짓;
CmdSave.Enabled:=거짓;
끝;
절차 TIniForm.FormDestroy(Sender: TObject);
시작하다
IniFile.Free; 생성된 객체를 해제합니다.
끝;
끝.
위의 방법은 Windows 95에서 Delphi 3.0을 사용하여 디버깅을 통과했습니다.