حان الوقت للحصول على الملفات وتعديلها في دلفي
تقدم هذه المقالة طريقة استخدام وظائف النظام ومكالمات وظيفة واجهة برمجة تطبيقات Windows للحصول على معلومات وقت الملف وتعديلها في Delphi.
غالبًا ما يستخدم الأصدقاء الذين يعرفون Windows 95/98 طريقة النقر بزر الماوس الأيمن لعرض معلومات السمة الخاصة بالملف المحدد. يتم سرد وقت إنشاء الملف ووقت التعديل ووقت الوصول في قائمة الخصائص. غالبًا ما تكون هذه المعلومات مفيدة للغاية ، وعادة ما يتم إكمال إعداداتها تلقائيًا بواسطة نظام التشغيل (أي DOS/Windows ، وما إلى ذلك) ولن يتم تعديلها بسهولة من قبل المستخدمين.
هنا ، سأقدم لك كيفية الحصول على وقت الملف وتعديله في Delphi. يوفر Delphi واجهة مكالمات كاملة لوظائف Windows API ، والتي يمكن أن تسهل برمجة Windows المتقدمة. باستخدام وظيفة FindFirst في Delphi ، يمكنك الحصول على سجل سمة الملف ، وحقل FindData في هذا السجل يسجل معلومات وقت الملف. لسوء الحظ ، لا يمكن الحصول على معلومات الوقت في FindData مباشرة. لذلك ، كتب شخص ما (ملاحظة المحرر: أنا آسف لأنني لا أعرف اسم هذا الشخص) كتب وظيفة تحويل لإكمال تحويل تنسيق وقت الملف. ويرد أدناه طريقة التنفيذ المحددة للرجوع إليها فقط:
وظيفة covfiledate (fd: _filetime): tdatetime ؛
{تحويل تنسيق وقت الملف}
var
TCT: _systemtime ؛
درجة الحرارة: _filetime ؛
يبدأ
filetimetolocalfiletime (FD ، temp) ؛
FiletimetOsystemtime (temp ، tct) ؛
covfileDate: = SystemTimetOdateTime (TCT) ؛
نهاية؛
مع دعم الوظيفة أعلاه ، يمكننا الحصول على معلومات زمنية من ملف. هنا مثال بسيط:
procdeure getFiletime (const tf: string) ؛
{الحصول على وقت الملف ، تمثل TF مسار الملف الهدف والاسم}
كونست
نموذج = yyyy/mm/dd ، hh: mm: ss ؛
var
TP: TsearchRec ؛
T1 ، T2 ، T3: String ؛
يبدأ
FindFirst (TF ، Faanyfile ، TP) ؛
covfileDate (tp.finddata.ftcreationTime))) ؛
{إرجاع وقت إنشاء الملف}
T2: = FormatDateTime (نموذج ،
covfileDate (tp.finddata.ftlastwriteTime))) ؛
{إرجاع وقت تعديل الملف}
T3: = formatDateTime (نموذج ، الآن)) ؛
{إرجاع وقت الوصول الحالي للملف}
FindClose (TP) ؛
نهاية؛
وقت تعيين ملف أكثر تعقيدًا. يستخدم المثال التالي أربعة مكونات datatimepicker لإكمال إعداد وقت إنشاء الملف ووقت التعديل. ملاحظة: يتم استبدال وقت الوصول للملف بوقت التعديل. عند استخدام المثال أدناه ، أضف أربعة مكونات datatimepicker إلى النموذج الخاص بك. حيث يتم تعيين نوع في مكونات datatimepicker الأولى والثالثة على dtkdate ، ويتم تعيين نوع في مكونات datatimepicker الثانية والرابعة على dtktime.
الإجراء setFileDateTime (const tf: string) ؛
{تعيين وقت الملف ، يمثل TF مسار الملف الهدف والاسم}
var
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 ؛
نهاية؛
يستثني
messagedlg (فشل عملية تعديل التاريخ! ،
Mterror ، [mbok] ، 0) ؛
{فشل لأنه يتم استخدام الملف الهدف ، إلخ}
نهاية؛
نهاية؛
يقدم المذكورة أعلاه بإيجاز طريقة تعديل سمات وقت الملف. أيضا ، يرجى عدم استخدام هذه التكنولوجيا لطرق غير عادلة مثل تدمير وثائق الآخرين.