แอปพลิเคชันส่วนใหญ่ใน Windows มีไฟล์เริ่มต้นเป็นของตัวเอง เช่น PowerBuilder, Office และ Cstar ดังนั้นการอ่านและการเขียนไฟล์เริ่มต้นจึงเป็นเทคโนโลยีที่โปรแกรมเมอร์อาวุโสทุกคนต้องเชี่ยวชาญ แม้ว่าการอ่านและการเขียนไฟล์การเริ่มต้นสามารถทำได้โดยใช้ Object ไฟล์ข้อความในภาษาปาสคาลจะถูกอ่านและเขียนในลักษณะเดียวกัน แต่เนื่องจากไฟล์การเริ่มต้นแตกต่างจากไฟล์ข้อความธรรมดา ไฟล์จึงมีรูปแบบคงที่ของตัวเอง (ดูไฟล์การเริ่มต้นด้านล่างคือไฟล์ rdfnt.ini ที่ให้มาใน ucdos) ใช้ไฟล์ข้อความเพื่ออ่านการเขียน การแปลงรูปแบบไม่เพียงแต่น่าเบื่อมาก แต่ยังมีแนวโน้มที่จะเกิดข้อผิดพลาดอีกด้วย เพื่ออำนวยความสะดวกให้กับโปรแกรมเมอร์ในการอ่านและเขียนข้อมูลในไฟล์การเริ่มต้น Delphi ได้จัดเตรียมคลาส TIniFile ให้กับผู้ใช้ซึ่งไฟล์การเริ่มต้น สามารถอ่านเขียนได้สะดวกมาก
เนื้อหาของไฟล์ rdfnt.ini ใน Ucdos คือ:
[ไดเร็กทอรีแบบอักษร True Type]
Dir=C:WINDOWSSYSTEM
[รายการแบบอักษร True Type]
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
COURBI.TTF=75
[ใช้แบบอักษร True Type ทั้งหมด]
ทั้งหมด=0
คลาส TiniFile ไม่ใช่ส่วนประกอบของ Delphi ดังนั้นจึงไม่พบในเทมเพลต VCL ของ Delphi ซึ่งถูกกำหนดไว้ในหน่วย inifiles ในระบบ Delphi ดังนั้นหากต้องการใช้คลาส TiniFile คุณต้องใช้คำสั่ง Uses inifiles ในหน่วยอย่างชัดเจน ไฟล์ที่ใช้คลาสนี้อธิบาย
มีฟังก์ชันสมาชิกมากมายที่กำหนดไว้ในคลาส TiniFile ต่อไปนี้เป็นฟังก์ชันสมาชิกที่ใช้บ่อยบางส่วน:
⑴สร้าง()
ฟังก์ชั่นถูกกำหนดเป็น: ตัวสร้างสร้าง (const FileName: string);
ฟังก์ชันนี้สร้างวัตถุของคลาส TiniFile พารามิเตอร์ FileName คือชื่อของไฟล์การกำหนดค่าเริ่มต้นที่จะอ่านและเขียน
หากไฟล์ที่จะอ่านและเขียนอยู่ในไดเร็กทอรี Windows (เช่นไฟล์ system.ini) คุณสามารถเขียนชื่อไฟล์ได้โดยตรงโดยไม่ต้องระบุพาธ ไม่เช่นนั้นคุณจะต้องระบุพาธ (เช่น d:ucdos dfnt.ini ).
หากไฟล์มีอยู่ในไดเร็กทอรีที่ระบุตามกฎต่อไปนี้ ให้เปิดไฟล์การกำหนดค่าเริ่มต้น มิฉะนั้น ให้สร้างไฟล์การกำหนดค่าเริ่มต้นในไดเร็กทอรีที่ระบุ
⑵อ่านมาตรา()
กระบวนการนี้ถูกกำหนดให้เป็น: PROcedure ReadSections (Strings: TStrings);
กระบวนการนี้จะอ่านชื่อโหนดทั้งหมด (นั่นคือ ส่วนที่อยู่ในวงเล็บ [] เช่น [แบบอักษร True Type] ในไฟล์ rdfnt.ini) จากอ็อบเจ็กต์คลาส TiniFile ที่สร้างขึ้น (นั่นคือ ไฟล์การเตรียมใช้งานที่เกี่ยวข้องกัน) list]) จะถูกจัดเก็บไว้ในรายการสตริง พารามิเตอร์ Strings คือชื่อตัวแปรของรายการสตริง
⑶ อ่านค่ามาตรา()
กระบวนการถูกกำหนดให้เป็น: ขั้นตอน ReadSectionValues (ส่วน const: string; Strings: TStrings);
กระบวนการนี้จะแปลงคำหลักแต่ละคำ (เช่น ARIALBI.TTF) ในโหนดที่สอดคล้องกับค่าของพารามิเตอร์ Section (เช่น [รายการแบบอักษร True Type] ในไฟล์ rdfnt.ini) และค่าที่มีอยู่ (เช่น ARIALBI ค่าคีย์เวิร์ด TTF คือ 67) จะถูกอ่านในรายการสตริงที่ระบุโดยพารามิเตอร์ Strings
⑷ อ่านมาตรา()
ขั้นตอนที่ถูกกำหนดเป็น: ขั้นตอน ReadSection (ส่วน const: string; Strings: TStrings);
กระบวนการนี้จะอ่านคำหลักแต่ละคำในโหนดที่สอดคล้องกับค่าของพารามิเตอร์ส่วนลงในรายการสตริงที่ระบุโดยพารามิเตอร์สตริง ความแตกต่างกับ ReadSectionValues() คือไม่ได้อ่านค่าที่สอดคล้องกันของคำหลักแต่ละคำ
⑸ อ่านสตริง()
ฟังก์ชั่นถูกกำหนดให้เป็น: ฟังก์ชั่น ReadString (const Section, Ident, Default: string): string;
ฟังก์ชันนี้ส่งคืนค่าคีย์เวิร์ดที่สอดคล้องกับชื่อโหนดพร้อมค่าของพารามิเตอร์ ส่วน และชื่อคีย์เวิร์ดพร้อมค่าของพารามิเตอร์ Ident (เช่น ค่าของคีย์เวิร์ด ARIALBI.TTF ในส่วน [รายการแบบอักษร True Type] คือ 67) เมื่อไม่มีคำสำคัญในโหนดหรือส่วนที่ระบุ ฟังก์ชันจะส่งกลับค่าเริ่มต้นของพารามิเตอร์ Default ค่าที่ส่งคืนคือข้อมูลสตริง
เมื่อชนิดข้อมูลของค่าคำหลักในโหนดที่ระบุไม่ใช่สตริง คุณสามารถใช้ฟังก์ชันสมาชิก ReadInteger() เพื่ออ่านค่าจำนวนเต็ม และฟังก์ชันสมาชิก ReadBool() เพื่ออ่านค่าบูลีน
⑹ เขียนสตริง()
กระบวนการถูกกำหนดเป็น: ขั้นตอน WriteString (const Section, Ident, Value: string);
กระบวนการนี้ตั้งค่าคีย์เวิร์ดโดยค่าของพารามิเตอร์ Section คือชื่อโหนด และค่าของพารามิเตอร์ Ident คือชื่อคีย์เวิร์ดเป็นค่าของพารามิเตอร์ Value กระบวนการนี้ตั้งค่าข้อมูลสตริง
เมื่อมีทั้งโหนดและคีย์เวิร์ดที่ระบุ ค่าของ Value จะถูกนำมาใช้แทนที่ค่าเดิม หากไม่มีโหนดที่ระบุ โหนดจะถูกเพิ่มลงในไฟล์การกำหนดค่าเริ่มต้นที่เกี่ยวข้องโดยอัตโนมัติ และค่าของโหนดจะเป็นค่าของ ส่วนพารามิเตอร์และในคำหลัก A จะถูกเพิ่มโดยอัตโนมัติภายใต้โหนด ชื่อคำหลักคือค่าของพารามิเตอร์ Ident และค่าที่สอดคล้องกับคำหลักคือค่าของพารามิเตอร์ Value หากมีโหนดอยู่ แต่คำหลักมี ไม่มีอยู่ คำหลักจะถูกเพิ่มโดยอัตโนมัติภายใต้โหนด ชื่อคำหลักคือค่าของพารามิเตอร์ Ident และค่าที่สอดคล้องกับคำหลักนี้คือค่าของพารามิเตอร์ Value
หากต้องการตั้งค่าจำนวนเต็ม ให้เรียกใช้ฟังก์ชันสมาชิก WriteInteger() ใช้ฟังก์ชันสมาชิก WriteBool() เพื่อตั้งค่าบูลีน
เมื่อทราบฟังก์ชันของฟังก์ชันข้างต้นแล้ว การสร้างหรืออ่านและเขียนไฟล์การกำหนดค่าเริ่มต้นก็ไม่ใช่เรื่องยาก ต่อไปนี้ใช้ตัวอย่างที่เป็นประโยชน์เพื่อแสดงวิธีการอ่านไฟล์การกำหนดค่าเริ่มต้น มีขั้นตอนดังต่อไปนี้:
⒈ วางกล่องรายการรวมกันสองกล่องชื่อ SectionComboBox และ IdentComboBox บนแบบฟอร์มที่ต้องการอ่านและเขียนไฟล์การเริ่มต้น SectionComboBox จะจัดเก็บชื่อโหนดและ IdentComboBox จะจัดเก็บชื่อคีย์ของโหนดที่เลือก กล่องป้อนข้อมูลชื่อ IdentValueEdit จะเก็บค่าของคำสำคัญที่เกี่ยวข้อง ปุ่มคำสั่งการแก้ไขชื่อ CmdChang สามารถใช้เพื่อแก้ไขค่าของคีย์เวิร์ดได้ หลังจากแก้ไข ให้ใช้ปุ่มคำสั่งหน่วยเก็บข้อมูลชื่อ CmdSave เพื่อบันทึกค่าคีย์เวิร์ดที่แก้ไขลงในไฟล์การกำหนดค่าเริ่มต้นที่เกี่ยวข้อง ชื่อหน่วยที่สอดคล้องกับแบบฟอร์มถูกตั้งค่าเป็น IniUnit ชื่อแบบฟอร์มถูกตั้งค่าเป็น IniForm และเค้าโครงแบบฟอร์มดังแสดงในรูปที่ 1 ด้านล่าง:
⒉ ในส่วนอินเทอร์เฟซของหน่วย IniUnit ให้ใช้ inifiles เพื่อระบุชื่อหน่วยที่กำหนดโดยคลาส TiniFile ที่จะอ้างอิง และกำหนดอ็อบเจ็กต์ของคลาส TiniFile ในส่วนคำอธิบายตัวแปร เช่น
var IniFile: TiniFile;
⒊ สร้างขั้นตอนเหตุการณ์ OnCreate ของแบบฟอร์ม ใช้ฟังก์ชันสร้างสมาชิกของคลาส TIniFile เพื่อสร้างอ็อบเจ็กต์ TIniFile ใช้อ็อบเจ็กต์นี้เพื่ออ่านและเขียนไฟล์การกำหนดค่าเริ่มต้น rdfnt.ini ในไดเร็กทอรี d:ucdos และอ่านโหนดทั้งหมดในไฟล์การกำหนดค่าเริ่มต้นลงในกล่องรายการรวม SectionComboBox ผ่านฟังก์ชันสมาชิก ReadSections() ใช้ฟังก์ชันสมาชิก ReadSection() เพื่ออ่านคำหลักทั้งหมดในโหนดแรกลงใน IdentComboBox ในกล่องรายการที่รวม ใช้ฟังก์ชันสมาชิก ReadString() เพื่อส่งค่าของคำสำคัญแรกไปยังกล่องป้อนข้อมูล IdentValueEdit
⒋ สร้างกระบวนการเหตุการณ์ OnChange ของกล่องรายการรวม SectionComboBox เมื่อเลือกรายการที่แตกต่างกันในกล่องรายการ (นั่นคือ ชื่อโหนดที่แตกต่างกัน) ให้ใช้ฟังก์ชันสมาชิก ReadSection() เพื่ออ่านคำสำคัญทั้งหมดในโหนดที่เลือกลงในกล่องรายการรวม IdentComboBox และใช้ฟังก์ชันสมาชิก ReadString() เพื่ออ่าน ค่าแรกของคำสำคัญจะถูกส่งไปยังกล่องป้อนข้อมูล IdentValueEdit
⒌ สร้างกระบวนการเหตุการณ์ OnChange ของกล่องรายการรวม IdentComboBox เมื่อเลือกรายการที่แตกต่างกัน (นั่นคือ ชื่อคำสำคัญที่แตกต่างกัน) ในกล่องรายการ ใช้ฟังก์ชันสมาชิก ReadString() เพื่อส่งค่าของคำสำคัญลงในกล่องป้อนข้อมูล IdentValueEdit
⒍ สร้างกระบวนการเหตุการณ์ OnClick ของปุ่มคำสั่ง CmdChang ทำให้เนื้อหาในกล่องอินพุต IdentValueEdit สามารถแก้ไขได้ (กล่องอินพุต IdentValueEdit ไม่สามารถแก้ไขได้โดยไม่ต้องกดปุ่มคำสั่ง) และตั้งค่าปุ่มคำสั่ง CmdSave ให้ถูกต้อง เพื่อให้สามารถจัดเก็บค่าคำสำคัญที่แก้ไขไว้ในไฟล์การเริ่มต้นที่เกี่ยวข้องได้
⒎ สร้างกระบวนการเหตุการณ์ OnClick ของปุ่มคำสั่ง CmdSave ถ้าค่าคำสำคัญมีการเปลี่ยนแปลง เรียกใช้ฟังก์ชันสมาชิก WriteString() เพื่อบันทึกค่าคำสำคัญที่ปรับเปลี่ยนลงในดิสก์
⒏ สร้างขั้นตอนเหตุการณ์ OnDestroy ของแบบฟอร์ม เมื่อแบบฟอร์มล้มเหลว อ็อบเจ็กต์ TIniFile ที่สร้างขึ้นจะถูกปล่อยเพื่อปล่อยทรัพยากรระบบที่ใช้โดยอ็อบเจ็กต์
ณ จุดนี้ หลังจากรันโปรเจ็กต์แล้ว การอ่านและการเขียนไฟล์การกำหนดค่าเริ่มต้นสามารถดำเนินไปได้อย่างราบรื่น แน่นอน คุณยังสามารถใช้ฟังก์ชันสมาชิก EraseSection() เพื่อลบส่วนที่ระบุได้ และคุณยังสามารถใช้ฟังก์ชันสมาชิก DeleteKey() เพื่อลบคีย์เวิร์ดที่ระบุ เนื่องจากพื้นที่จำกัด ฉันจะไม่แนะนำโดยละเอียดที่นี่ หากคุณสนใจคุณสามารถดูความช่วยเหลือการใช้งาน Delphi ได้
ต่อไปนี้เป็นซอร์สโค้ดของหน่วยนี้:
หน่วย IniUnit;
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, กล่องโต้ตอบ,
StdCtrls, infiles;
พิมพ์
TIniForm = คลาส (TForm)
SectionComboBox: TComboBox;
Label1: TLabel;
CmdSave: TButton;
CmdChang: TButton;
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
Label2: TLabel;
Label3: TLabel;
ขั้นตอน FormCreate (ผู้ส่ง: TObject);
ขั้นตอน SectionComboBoxChange (ผู้ส่ง: TObject);
ขั้นตอน FormDestroy (ผู้ส่ง: TObject);
ขั้นตอน CmdChangClick (ผู้ส่ง: TObject);
ขั้นตอน CmdSaveClick (ผู้ส่ง: TObject);
ขั้นตอน IdentComboBoxChange (ผู้ส่ง: TObject);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
จบ;
var
IniForm: TIniForm;
{อ่านและเขียนไฟล์การเริ่มต้น Windows ผ่านคลาส TIniFile ใน Delphi}
IniFile: TIniFile;
การดำเนินการ
{$R *.DFM}
ขั้นตอน TIniForm.FormCreate (ผู้ส่ง: TObject);
เริ่ม
{ ใช้ฟังก์ชันสร้างสมาชิกของคลาส TIniFile เพื่อสร้างคู่ TIniFile
อ็อบเจ็กต์ อ็อบเจ็กต์นี้ใช้เพื่ออ่านและเขียนไฟล์ rdfnt.ini ในไดเร็กทอรี d:ucdos
หากไฟล์ที่จะอ่านและเขียนอยู่ในไดเร็กทอรี Windows (เช่น system.ini)
คุณสามารถเขียนชื่อไฟล์ได้โดยตรงโดยไม่ต้องระบุเส้นทาง}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ เนื้อหาทั้งหมดในไฟล์การเริ่มต้น system.ini ที่เกี่ยวข้องกับอ็อบเจ็กต์ TIniFile
ชื่อส่วนที่มีส่วนต่างๆ (นั่นคือ ส่วนที่ล้อมรอบด้วยเครื่องหมายวงเล็บ []) จะถูกส่งไปยังกลุ่มแบบเลื่อนลง
กล่องรายการคำสั่งผสม SectionComboBox}
SectionComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{เลือกชื่อส่วนแรกของไฟล์ system.ini}
SectionComboBox.ItemIndex:=0;
SectionComboBoxChange(ผู้ส่ง);
CmdSave.Enabled:=เท็จ;
จบ;
{รายการที่เกี่ยวข้องในส่วนที่เลือกในกล่องรายการคำสั่งผสม IniComboBox
ตัวแปรและค่าที่เกี่ยวข้องจะถูกส่งไปยังโปรแกรมแก้ไขข้อความหลายบรรทัด IniMemo}
ขั้นตอน TIniForm.SectionComboBoxChange (ผู้ส่ง: TObject);
เริ่ม
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(ผู้ส่ง);
จบ;
ขั้นตอน TIniForm.IdentComboBoxChange (ผู้ส่ง: TObject);
เริ่ม
IdentValueEdit.Enabled:=เท็จ;
{อ่านค่าคำหลักที่เลือก}
IdentValueEdit.Text:=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Text,');
จบ;
ขั้นตอน TIniForm.CmdChangClick (ผู้ส่ง: TObject);
เริ่ม
CmdSave.Enabled:=จริง;
IdentValueEdit.Enabled:=จริง;
IdentValueEdit.SetFocus;
จบ;
ขั้นตอน TIniForm.CmdSaveClick (ผู้ส่ง: TObject);
เริ่ม
ถ้า IdentValueEdit.Modified ให้เริ่มต้น
IniFile.WriteString (SectionComboBox.Text,
IdentComboBox.ข้อความ
IdentValueEdit.Text);
จบ;
IdentValueEdit.Enabled:=เท็จ;
CmdSave.Enabled:=เท็จ;
จบ;
ขั้นตอน TIniForm.FormDestroy (ผู้ส่ง: TObject);
เริ่ม
IniFile.Free {ปล่อยวัตถุที่สร้างขึ้น}
จบ;
จบ.
วิธีการข้างต้นผ่านการดีบักโดยใช้ Delphi 3.0 ใน Windows 95