سؤال

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

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

لقد فكرت بالفعل في أخذ قائمتين من قوائم الدليل مفصولة ببضع ثوانٍ ومقارنة أحجام الملفات، ولكن هذا يقدم مقايضة الوقت/الموثوقية التي لا يسعدها رؤسائي ما لم يكن هناك بديل.

بالنسبة للخلفية، تتم كتابة التطبيق كمجموعة من ملفات Matlab M، لذا لا أخشى استخدام حيل JRE/CLR...


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

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


خاتمة: يبدو أنه لا توجد طريقة سهلة للقيام بذلك، لذلك قررت اتباع نهج الحزام والأقواس - يكون الملف جاهزًا للمعالجة إذا:

  • ولا يتغير حجمه خلال فترة زمنية معينة، و
  • من الممكن فتح الملف في وضع القراءة فقط (بعض عمليات النسخ تضع قفلًا على الملف).

شكرا للجميع على إجاباتهم!

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

المحلول

هذه مشكلة برمجيات وسيطة قديمة قدم التلال، والإجابة المختصرة هي:لا.

يضع "الحلان" المسؤولية على عاتق أداة تحميل الملفات:(1) قم بتحميل الملف في دليل مرحلي ثم انقله إلى الدليل الوجهة (2) قم بتحميل الملف، ثم قم بإنشاء/تحميل ملف "جاهز" يشير إلى حالة ملف المحتوى.

الأول هو الأفضل، لكن كلاهما غير أنيق.الحقيقة هي أن وسائط الاتصال موجودة بشكل أفضل من نظام الملفات.فكر في استخدام بعض IPC الذي يتضمن فقط الدفع أو السحب (وليس كليهما، كما هو الحال في نظام الملفات) مثل HTTP POST، أو قائمة انتظار JMS أو MSMQ، وما إلى ذلك.علاوة على ذلك، يمكن أن يكون هذا أيضًا متزامنًا، مما يسمح لعملية استلام الملف بالاعتراف بالمحتوى، وحتى التحقق من جدارته، وتسليم العميل إيصالًا - وهذا هو الطريق الصحيح لعدم الإنكار.اتبع هذا، ولن تواجه أبدًا أي جدال حول ما إذا كان الملف قد تم تسليمه إلى الخادم الخاص بك للمعالجة أم لا.

م.

نصائح أخرى

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

يحرر:يعتمد الأمر حقًا على نظام الملفات، وعلى ما إذا كانت وظيفة النسخ الخاصة به تحتوي على مفهوم "الملف المكتمل".لا أعرف بروتوكول SMB جيدًا، ولكن إذا كان لديه هذا المفهوم، فيمكنك كتابة تطبيق يكشف عن واجهة SMB (أو تصحيح Samba) وواجهة برمجة التطبيقات (API) لتلقي إخطار بنسخ الملفات المكتملة.ربما الكثير من العمل رغم ذلك.

أحد الاحتمالات البسيطة هو إجراء الاستقصاء على فترة زمنية كبيرة إلى حد ما (من 2 إلى 5 دقائق) والاعتراف بالملف الجديد فقط في المرة الثانية التي تراه فيه.

لا أعرف طريقة في أي نظام تشغيل لتحديد ما إذا كان الملف لا يزال قيد النسخ، بخلاف التحقق مما إذا كان الملف مقفلاً.

كيف تصل الملفات إلى هناك؟هل يمكنك تعيين سمة عليها أثناء كتابتها ثم تغيير السمة عند اكتمال الكتابة؟وهذا يجب أن يتم من خلال الشيء الذي يقوم بالكتابة ...والذي يبدو أنه ليس خيارًا.

بخلاف ذلك، فإن تخزين القائمة مؤقتًا ومعاملة الملف على أنه جديد إذا كان له نفس حجم الملف لقائمتين متتاليتين هو أفضل طريقة يمكنني التفكير فيها.

وبدلاً من ذلك، يمكنك استخدام الوقت المعدل على الملف - يجب أن يكون الملف جديدًا وله وقت تعديل لا يقل عن x في الماضي.لكنني أعتقد أن هذا سيكون معادلاً للتخزين المؤقت للقائمة.

إذا كنت تقوم باستقصاء المجلد كل بضع ثوانٍ، فهذا ليس بمثابة عقوبة زمنية كبيرة، أليس كذلك؟ومنبرها ملحد.

وأيضاً لينكس فقط: http://www.linux.com/feature/144666

مثل cron ولكن للملفات.لست متأكدًا من كيفية تعامله مع مشكلتك المحددة - ولكن قد يكون مفيدًا؟

ما هو نظام التشغيل الخاص بك.في نظام التشغيل Unix، يمكنك استخدام الأداة المساعدة "lsof" لتحديد ما إذا كان المستخدم لديه الملف مفتوحًا للكتابة.يبدو أنه في مكان ما في MS Windows Process Explorer توجد نفس الوظيفة.

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

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