سؤال

أنا أستخدم ReadDirectoryChangesw لتجسس مجلد، إذا قمت بنسخ ملف كبير إلى المجلد، يمكنني تلقي رسائل متعددة File_action_modified، ويبدو أن Windows يكتب جزءا كبيرا من الملفات الكبيرة من الملف، يمكنك الحصول على إشعار تعديل الملف لكل منهما زمن. حاولت استخدام API CreateFile للتحقق مما إذا كان الملف الذي يمكن أن يفتحه AP أم لا، ولكن في وقت ما، يتم تأمين بعض الملفات دائما من قبل AP الأخرى، على سبيل المثال، إذا كنت تفتح Outlook، فستحديث PST، لكن AP CAN 'T الوصول إليها، علينا أن نبدأ نسخة الظل لفتحه. لذلك سؤالي هو، كيفية معرفة ملف تم الانتهاء من النسخ؟

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

المحلول

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

تعديل: هذا ليس الحل الأمثل في الحالة العادية، ولكن النظر في أنه في حالة حالات OP، يتم استبعاد حلول أفضل من خلال قيود المشكلة. فكر في هذا قبل أن تفكر في downvoting.

نصائح أخرى

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

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

مواصفات C ++ الأصلية ومثال التعليمات البرمجية:

http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx.

.صافي :

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx.

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