filesystemwatcher.Changed الحرائق على الفور عند فتح Excel 2007 ملف XLS في وضع التوافق

StackOverflow https://stackoverflow.com/questions/2403698

سؤال

نستخدم ملفات filesystemWatcher لمراقبة المستندات التي تم فتحها من نظام إدارة المستندات لدينا، وإذا سقي المستخدم المستند، نسأل ما إذا كانوا قد يحبونهم أيضا في نظامنا.

لدينا مشكلة في ملفات XLS في Excel 2007 (لم تحقق من أن المشكلة غير موجودة في عام 2003، ولكن يبدو أنها ملفات مفتوحة في وضع التوافق في عام 2007) حيث ينطلق الحدث المتغير فورا عند فتح الملف، و ثم مرة أخرى عند إغلاق الملف، حتى لو لم يتغير شيء أو يختار المستخدم عدم الحفظ عند الإغلاق. هذا السلوك نفسه غير موجود عند فتح ملفات XLSX.

كتبت تطبيق اختبار للتحقق من السلوك، والذي يمكنك العثور عليه في (http://www.just2guys.net/sofiles/fswexcel.zip.). في التطبيق، يوجد ملف filesystemWatcher واحد لكل نوع notifyfilter، بحيث يكون واضحا لماذا تم إطلاق الحدث الذي تم تغييره.

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

هل كانت مفيدة؟

المحلول

لقد لاحظت هذا بكلمة، ويمكنك ببساطة إعادة إنتاجها:

إذا قمت بفتح ملف .doc أو exls مع تطبيق Office، فسيتم فتح الطابع الزمني إلى وقت فتح المستند.

إذا قمت بإغلاق التطبيق، فسيتم إعادة تعيين الطابع الزمني إلى قيمتها الأصلية (فقط إذا قمت بحفظ ONT).

لذلك لملفات Office، تحتاج إلى اثنين من الشيكات الإضافية:

  • عند Open، عندما يتم تعيين الطابع الزمني للوقت الحالي، تحقق من أنه يمكن فتح الملف حصريا

  • عند إغلاق، تحقق مما إذا كان الطابع الزمني "قريبا من" التاريخ والوقت الحالي، أو التحقق من علم أرشيف الملف

نصائح أخرى

نظام نظام الملفات عادة ما يكون الشر. يحترق الكثير من الناس لأنه يسجل الأحداث قبل كتابة الملف بالكامل.

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

يقوم Excel بإنشاء ملف مؤقت في كل مرة يفتح فيها ملف - ربما هذا هو الحدث الذي تراه. تحقق من اسم خاصية اسم filesystemeventargs وتجاهل الحدث إذا كان اسم الملف يبدأ ب "~".

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