سؤال

أحتاج إلى تحديد المجلدات التي تحتوي على ملفات تم تعديلها "مؤخرا" (خلال فترة زمنية معينة).ألاحظ أن طوابع بيانات المجلد يبدو أنها يتم تحديثها كلما تم تعديل ملف موجود ، لكن هذا السلوك لا ينتشر في الشجرة ، أي.لا يتم تحديث طابع تاريخ المجلد الذي يحتوي على المجلد الذي يحتوي على الملف المعدل.

يمكنني العمل مع هذا السلوك ، لكنني أظن أنه يعتمد على النظام الأساسي/نظام الملفات/الشبكة أو محرك الأقراص المحلي ، إلخ.ما زلت أرغب في الاستفادة منه حيث يمكنني ، لذلك أحتاج إلى وظيفة منطقية للعودة بشكل صحيح إذا كان النظام الأساسي/القرص الذي يشغل تطبيقي يدعم هذا السلوك.

أنا سعيد جدا لتكرار من خلال الشجرة.ما أريد تجنبه هو الاضطرار إلى القيام به فيندفيرست / فيندنكست لكل ملف في كل مجلد لمعرفة ما إذا تم تعديل أي منها في (قل) اليوم الأخير - إذا كان بإمكاني تجنب القيام بذلك للمجلدات التي لم يتم تعديل طوابع البيانات الخاصة بها خلال اليوم الأخير سيوفر الكثير من الوقت.

لا يوجد حل صحيح

نصائح أخرى

تحقق من FindFirstChangeNotification و FindNextChangeNotification المهام خيار آخر هو استخدام TJvChangeNotify مكون جدي.

بالإضافة إلى ذلك ، يمكنك التحقق من هذا الرابط

الحلول التي تم نشرها حتى الآن هي حول الحصول على الإخطارات فور حدوثها ، وأنها سوف تعمل بشكل جيد لهذا الغرض.إذا كنت ترغب في النظر إلى الماضي ومعرفة متى تم تغيير شيء ما آخر مرة ، بدلا من مراقبته في الوقت الفعلي ، فإنه يصبح أكثر صعوبة.أعتقد أنه لا توجد طريقة للقيام بذلك إلا من خلال البحث المتكرر عبر شجرة المجلد والتحقق من طوابع البيانات.

تحرير: ردا على تعليق أوب ، نعم ، فإنه لا يبدو أن هناك أي طريقة لتكوين فيندفيرست/فيندنكست فقط ضرب الدلائل وليس الملفات.ولكن يمكنك تخطي التحقق من التواريخ على الملفات باستخدام هذا الفلتر: (SearchRec.Attr and SysUtils.faDirectory <> 0).يجب أن تسرع الأمور قليلا.لا تتحقق من التواريخ الموجودة على الملفات على الإطلاق.ربما لا يزال لديك لمسح من خلال كل شيء ، على الرغم من ، منذ أبي ويندوز لا توفر أي وسيلة (التي أعرفها) للاستعلام فقط للمجلدات وليس الملفات.

كتبت رمز لهذا الغرض لأحد مشاريعي.يستخدم هذا FindFirstchangenotification و FindNextChangenotification وظائف API. هنا هو الرمز (أزلت بعض أجزاء المشروع المحددة):

giveacodicetagpre.

يوفر هذا الطبقتين؛فئة موضوع تراقب مجلدا للتغييرات، وإذا تم اكتشاف تغيير، فسوف يرجع وقت التغيير الحالي ووقت التغيير السابق من خلال حدث OnFolderChange.وفصول قائمة لتخزين قائمة من مؤشرات الترابط المراقبة.هذه القائمة تنهي كل مؤشر ترابط خاص تلقائيا عند إزالة الخيط من القائمة.

آمل أن يساعدك.

يجب أن يكون لديك نظرة على http://help.delphi-jedi.org / item.php؟ معرف= 172977 وهو حل جاهز. إذا كنت لا ترغب في تنزيل وتثبيت JVCL بالكامل (والتي هي جزء كبير من الكود؛)) قد ترغب في رؤية مصدر الملف عبر الإنترنت - http://jvcl.svn.sourceforge.net/viewvc/jvccl/trunk/jvcl/run/jvchangenotify.PAS؟ مراجعة= 12481 &؛ عرض= علامة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top