ถึงเวลารับและแก้ไขไฟล์ใน Delphi
บทความนี้แนะนำวิธีการใช้ฟังก์ชั่นระบบและการเรียกใช้ฟังก์ชัน Windows API เพื่อรับและแก้ไขข้อมูลเวลาไฟล์ใน Delphi
เพื่อนที่คุ้นเคยกับ Windows 95/98 มักจะใช้วิธีคลิกขวาเพื่อดูข้อมูลแอตทริบิวต์ของไฟล์ที่เลือก เวลาในการสร้างไฟล์เวลาในการแก้ไขและเวลาการเข้าถึงแสดงอยู่ในเมนูคุณสมบัติ ข้อมูลนี้มักจะมีประโยชน์มากและการตั้งค่าของพวกเขามักจะเสร็จสมบูรณ์โดยระบบปฏิบัติการโดยอัตโนมัติ (นั่นคือ DOS/Windows ฯลฯ ) และจะไม่สามารถแก้ไขได้อย่างง่ายดายโดยผู้ใช้
ที่นี่ฉันจะแนะนำวิธีรับและแก้ไขเวลาไฟล์ใน Delphi Delphi จัดเตรียมอินเทอร์เฟซการโทรที่สมบูรณ์สำหรับฟังก์ชั่น Windows API ซึ่งสามารถอำนวยความสะดวกในการเขียนโปรแกรม Windows ขั้นสูง การใช้ฟังก์ชั่น FindFirst ใน Delphi คุณสามารถรับบันทึกแอตทริบิวต์ไฟล์และฟิลด์ FindData ในบันทึกข้อมูลเวลาไฟล์โดยละเอียดนี้ น่าเสียดายที่ข้อมูลเวลาใน FindData ไม่สามารถรับได้โดยตรง ดังนั้นใครบางคน (หมายเหตุบรรณาธิการ: ฉันขอโทษฉันไม่ทราบชื่อของบุคคลนี้) เขียนฟังก์ชั่นการแปลงเพื่อให้การแปลงรูปแบบเวลาไฟล์เสร็จสมบูรณ์ วิธีการใช้งานเฉพาะได้รับด้านล่างสำหรับการอ้างอิงเท่านั้น:
ฟังก์ชั่น covfiledate (fd: _fileTime): tdatetime;
{แปลงรูปแบบเวลาไฟล์}
วาจา
TCT: _SystemTime;
อุณหภูมิ: _fileTime;
เริ่ม
FiletimetolocalfileTime (FD, Temp);
filetimetosystemtime (อุณหภูมิ, TCT);
CovFiledate: = SystemTimetOdateTime (TCT);
จบ;
ด้วยการสนับสนุนฟังก์ชั่นข้างต้นเราสามารถรับข้อมูลเวลาของไฟล์ได้ นี่คือตัวอย่างง่ายๆ:
procdeure getFileTime (const tf: string);
{รับเวลาไฟล์ tf แสดงเส้นทางไฟล์เป้าหมายและชื่อ}
const
model = yyyy/mm/dd, hh: mm: ss;
วาจา
tp: tsearchrec; {ประกาศ TP เป็นบันทึกการค้นหา}
T1, T2, T3: String;
เริ่ม
findfirst (tf, faanyfile, tp);
covfiledate (tp.finddata.ftcreationtime)));
{ส่งคืนเวลาการสร้างไฟล์}
T2: = formatDateTime (รุ่น,
covfiledate (tp.finddata.ftlastwriteTime)));
{ส่งคืนเวลาการแก้ไขไฟล์}
t3: = formatDateTime (รุ่นตอนนี้));
{ส่งคืนเวลาการเข้าถึงปัจจุบันของไฟล์}
FindClose (TP);
จบ;
เวลาในการตั้งค่าไฟล์มีความซับซ้อนมากขึ้นที่นี่เราแนะนำการใช้ส่วนประกอบ DataTimePicker ใน Delphi เพื่อช่วยในการดำเนินการที่ซับซ้อนนี้ ตัวอย่างต่อไปนี้ใช้ส่วนประกอบ DataTimePicker สี่ชิ้นเพื่อให้การตั้งค่าเวลาสร้างไฟล์และเวลาในการแก้ไขเสร็จสมบูรณ์ หมายเหตุ: เวลาการเข้าถึงของไฟล์ถูกแทนที่ด้วยเวลาการแก้ไข เมื่อใช้ตัวอย่างด้านล่างให้เพิ่มส่วนประกอบ DataTimePicker สี่รายการลงในแบบฟอร์มของคุณ ในกรณีที่ส่วนประกอบ DataTimePicker ที่หนึ่งและสามถูกตั้งค่าเป็น dtkdate และชนิดในส่วนประกอบ DataTimePicker ที่สองและสี่ถูกตั้งค่าเป็น dtktime
ขั้นตอน setfiledatetime (const tf: string);
{ตั้งเวลาไฟล์ tf แสดงเส้นทางไฟล์เป้าหมายและชื่อ}
วาจา
DT1, DT2: จำนวนเต็ม;
FS: tfilestream;
fct, flt: tfileTime;
เริ่ม
dt1: = datetimetofiledate (
trunc (form1.datetimepicker1.date) + frac (form1.datetimepicker2.time));
dt2: = datetimetofiledate (
trunc (form1.datetimepicker3.date) + frac (form1.datetimepicker4.time));
{แปลงข้อมูลที่ป้อนโดยผู้ใช้ใน DataTimePicker}
พยายาม
fs: = tfilestream.create (tf, fmopenreadwrite);
พยายาม
ถ้า dosdatetimetofileTime (longrec (dt1) .hi, longrec (dt1) .lo, fct) และ
localfiletimetofileTime (FCT, FCT) และ
DosdatetimetofileTime (Longrec (DT2) .Hi, LongRec (DT2) .lo, Flt) และ
localfiletimetofileTime (flt, flt)
จากนั้น setFileTime (fs.handle,
@fct, @flt, @flt);
{ตั้งค่าแอตทริบิวต์เวลาไฟล์}
ในที่สุด
fs.free;
จบ;
ยกเว้น
MessageGlg (การดำเนินการแก้ไขวันที่ล้มเหลว!
Mterror, [mbok], 0);
{ล้มเหลวเนื่องจากมีการใช้ไฟล์เป้าหมาย ฯลฯ }
จบ;
จบ;
ข้างต้นแนะนำวิธีการแก้ไขแอตทริบิวต์เวลาไฟล์ นอกจากนี้โปรดอย่าใช้เทคโนโลยีนี้เพื่อวิธีที่ไม่ยุติธรรมเช่นการทำลายเอกสารของผู้อื่น