اكتشاف ما إذا كانت محتويات المجلد قد تغيرت؟
-
06-07-2019 - |
سؤال
شروط:
- ويندوز 98 سي
- WMI غير متوفر
لدي كود يشبه هذا، مكتوب باستخدام غلاف VBScript الستيرويدي باستخدام MSScript.
do
a = files.collectfiles( "c:\userver", "" )
for i = 0 to ubound( a )
f = a(i)
if strings.endswith( f, ".usv" ) then
d = files.readfilee( f )
on error resume next
executeglobal d
nErr = err.number
sErr = err.description
on error goto 0
if nErr <> 0 then
trace "*** Error " & nErr & ", " & sErr
end if
files.deletefile f
end if
next
system.sleep 10
system.cooperate
loop
هناك الكثير من نشاط القرص مع هذا الاستدعاء إلى files.collectfiles.هل هناك طريقة ما لاكتشاف أي تغيير في محتويات المجلد دون فحص المجلد فعليًا بحثًا عن الملفات؟
المحلول
حدد "التغيير في محتويات المجلد".
إذا كان ذلك يعني إضافة ملف أو حذفه أو إعادة تسميته، فسيتم تحديث الطابع الزمني المعدل للمجلد كلما حدث مثل هذا الحدث.
إذا كنت تريد بدلاً من ذلك معرفة متى يتم تعديل الملفات، فستحتاج إلى قراءتها.
ومع ذلك، بالنظر إلى ما تحاول القيام به (فحص مجلد بحثًا عن ملفات .usv جديدة، ومعالجتها وحذفها)، فمن الأفضل تتبع الطابع الزمني الموجود على المجلد وتحديثه مباشرةً قبل الاتصال بملفات التجميع. (لاحظ أن الوقت الصحيح للتسجيل هو فقط قبل استدعاء ملفات التجميع، وإلا فإنك تتعرض لخطر عدم الاستيقاظ إذا تمت إضافة ملف أثناء استدعاء ملفات التجميع أو بعد ذلك مباشرة).
نصائح أخرى
توجد عينة تدعي أنها تعمل على كافة الإصدارات بدءًا من نظام التشغيل Win95 وحتى نظام التشغيل WinXP على الأقل.تم تطويره تحت Win98 مع VB5.باستخدام (ثم؟الروابط المقدمة إلى المستند أدناه) وظائف SHChangeNotify* غير الموثقة.
SHChangeNotifyRegister:تلقي إخطارات تغيير شل
وظيفة SHChangeNotifyRegister وظيفة SHChangeNotifyDeregister
هناك حل آخر باستخدام قراءة دليل التغييراتW هنا:
VB6 WinAPI ReadDirectoryChangesW (راجع المشاركة الخامسة من يانغ كوك واه)
لقد طلبت على وجه التحديد شيئًا ما في VB ويعمل على نظام التشغيل Win98 وليس لدي إجابة لهذا السؤال، ولكن MS لديه مثال c/win32 حول كيفية تحقيق ذلك على نظام التشغيل Windows2000+ باستخدام FindFirstChangeNotification.شيء آخر هو أنه على ما يبدو "FileSystemWatcher"في .NET لا يعمل/يدعم على نظام التشغيل Win98.ما هي وجهة نظري؟ربما لا يوجد حل سهل لهذا الأمر وعليك أن تتوصل إلى شيء بنفسك.