دلفي:تحقق مما إذا كان الملف قيد الاستخدام

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

  •  20-08-2019
  •  | 
  •  

سؤال

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

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

المحلول

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

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

إذا لم يكن الأمر كذلك، يمكنك التقاط الاستثناء، وإما

  • اذهب وافعل شيئًا آخر
  • انتظر بعض الوقت وحاول مرة أخرى

إنها إحدى مواقف الحياة التي يكون فيها طلب المغفرة أفضل من الإذن :)

نصائح أخرى

وهناك طريقة جديدة للحصول على أصل ملف تأمين للفيستا وهنا: HTTP: // شبكة الاتصالات العالمية. remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/

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

ولست متأكدا في أي لغة البرمجة التي ترغب في معرفة ما اذا كان يمكنك كتابة إلى ملف. في جاوة، java.io .File.canWrite () يمكن القيام بهذه المهمة بالنسبة لك.

والعام:

في UNIX مثل نظام التشغيل، يمكنك استخدام lsof الأوامر.

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

وهذه الأداة لديه واجهة سطر الأوامر، لذلك يمكن استخدام واجهة برمجة اللغة الخاص بك (على سبيل المثال java.lang.Process) لتشغيل أداة وعرض رسالة خطأ مفيدة.

وIsFileInUse على النحو الوارد في http://delphi.about.com/cs /adptips1999/a/bltip0999_3.htm

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