ไฟล์สามประเภทที่ใช้สำหรับการอ่านและการเขียน (I/O) ใน Delphi
1. ประเภทไฟล์ปาสคาลเก่า
ประเภทไฟล์ที่แสดงโดยตัวแปรไฟล์เก่า เช่น F:text, F:File มีการกำหนดหมวดหมู่ไว้ 3 หมวดหมู่: ชนิดที่พิมพ์แล้ว ชนิดที่ไม่พิมพ์ และฟังก์ชันการทำงานของไฟล์ Delphi บางอย่าง ตัวอย่างเช่น: AssignPRn, Writeln, คลาสไฟล์เหล่านี้จะคล้ายกับ Windows ตัวจัดการไฟล์เข้ากันไม่ได้
2. ตัวจัดการไฟล์ Windows (ตัวจัดการ)
ตัวจัดการไฟล์ Pascal เชิงวัตถุจะห่อหุ้มประเภทตัวจัดการไฟล์ Windows และไลบรารีฟังก์ชันการทำงานของไฟล์จะห่อหุ้มฟังก์ชัน Windows API ตัวอย่างเช่น "Fileread" เรียกฟังก์ชัน Windows API "ReadFile" คุณคุ้นเคยกับ Windows API คุณสามารถใช้คำสั่งไฟล์ Windows เพื่อดำเนินการกับไฟล์ได้
3. ไฟล์สตรีม
สตรีมไฟล์เป็นอินสแตนซ์อ็อบเจ็กต์ของคลาส TFileStream สตรีมไฟล์เป็นประเภทการดำเนินการไฟล์ระดับสูง TFileStream มีแอตทริบิวต์การจัดการที่สามารถใช้เพื่อดำเนินการประเภทการจัดการไฟล์ของ Windows
วิธีเลือกประเภทไฟล์
ตัวจัดการไฟล์ Windows เป็นประเภทการดำเนินการไฟล์ระดับล่างที่ให้การควบคุมการอ่านและเขียนไฟล์แบบซิงโครนัสและแบบอะซิงโครนัสที่ยืดหยุ่น ข้อมูลต่อไปนี้แสดงคำอธิบายรหัสเทียมของการซิงโครไนซ์ไฟล์และการดำเนินการแบบอะซิงโครนัสโดยใช้ประเภทตัวจัดการไฟล์ Windows:
การดำเนินการแบบซิงโครนัส:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// ตรวจสอบ eof
ถ้า (bResult && nBytesRead == 0, ) {
// เราอยู่ท้ายไฟล์แล้ว
-
การดำเนินการแบบอะซิงโครนัส:
// ตั้งค่าฟิลด์โครงสร้างที่ทับซ้อนกัน
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = โมฆะ;
// พยายามดำเนินการอ่านแบบอะซิงโครนัส
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gซ้อนทับกัน); ;
// หากเกิดปัญหาหรือการดำเนินการแบบอะซิงโครนัสยังค้างอยู่ ...
ถ้า (!bResult)
-
// จัดการกับรหัสข้อผิดพลาด
สวิตช์ (dwError = GetLastError())
-
กรณี ERROR_HANDLE_EOF:
-
// เรามาถึงจุดสิ้นสุดของไฟล์แล้ว
//ระหว่างการโทรไปยัง ReadFile
// รหัสเพื่อจัดการสิ่งนั้น
-
กรณี ERROR_IO_PENDING:
-
// asynchronous i/o ยังอยู่ในระหว่างดำเนินการ
//ทำอย่างอื่นสักพัก.
GoDoSomethingElse() ;
// ตรวจสอบผลลัพธ์ของการอ่านแบบอะซิงโครนัส
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE) ;
// หากมีปัญหา ...
ถ้า (!bResult)
-
// จัดการกับรหัสข้อผิดพลาด
สวิตช์ (dwError = GetLastError())
-
กรณี ERROR_HANDLE_EOF:
-
// เรามาถึงจุดสิ้นสุดของไฟล์แล้ว
ไฟล์ระหว่างการดำเนินการแบบอะซิงโครนัส
-
// จัดการกับกรณีข้อผิดพลาดอื่นๆ
-
-
} // ปิดท้ายด้วย
// จัดการกับกรณีข้อผิดพลาดอื่นๆ
} // สวิตช์สิ้นสุด
} // สิ้นสุดถ้า
แม้ว่าตัวจัดการไฟล์ของ Windows จะให้การควบคุมไฟล์ที่ยืดหยุ่น แต่ก็ต้องเขียนโค้ดการจัดการข้อผิดพลาดเพิ่มเติม
ไม่คุ้นเคยกับ Windows API ให้ใช้ประเภทตัวแปรไฟล์เก่าที่แนะนำโดย Delphi
ไฟล์ประเภทเก่าของ Delphi ใช้ AssignFile เพื่อเชื่อมโยงตัวแปรไฟล์กับไฟล์ฟิสิคัล ซึ่งกำหนดโดย Delphi
การดำเนินการต่างๆ กับตัวแปรไฟล์เพื่อให้การเข้าถึงและการดำเนินการไฟล์เสร็จสมบูรณ์ ต่อไปนี้เป็นคลาสตัวแปรของไฟล์
พิมพ์คำอธิบายรหัสการดำเนินการ:
var
ฉ: ไฟล์ข้อความ;
ส: สตริง;
เริ่ม
ถ้า OpenDialog1.Execute จากนั้น { แสดงกล่องโต้ตอบเปิด }
เริ่ม
AssignFile(F, OpenDialog1.FileName); { ไฟล์ที่เลือกในกล่องโต้ตอบ }
รีเซ็ต(F);
Readln(F, S); { อ่านบรรทัดแรกจากไฟล์ }
Edit1.Text := S; { ใส่สตริงในตัวควบคุม TEdit }
ปิดไฟล์(F);
จบ;
จบ;
File stream เป็นคลาสย่อยของ stream (คลาส stream) ดังนั้นข้อดีอย่างหนึ่งของการใช้งานก็คือสามารถสืบทอดคุณสมบัติของคลาสพาเรนต์ได้โดยอัตโนมัติ โดยสามารถทำงานร่วมกับคลาสสตรีมอื่นๆ ได้อย่างง่ายดาย ตัวอย่างเช่น หากคุณต้องการเขียนไดนามิก บล็อกหน่วยความจำ ลงในดิสก์ คุณสามารถใช้ TFileStream และ TMemoryStream เพื่อดำเนินการให้เสร็จสิ้น