سؤال

أحاول كتابة أداة مساعدة تسمح بنقل الملفات في Windows، وعندما تجد ملفًا قيد الاستخدام، ستقوم بتعيين هذا الملف ليتم نقله عند إعادة التشغيل.

يبدو أن MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) هو الخيار الصحيح لهذا، ولكن لا يمكنني معرفة رمز الخطأ الذي أبحث عنه من GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx) لمعرفة أن الملف قيد الاستخدام.

أريد أن تفشل الأداة المساعدة عند وجود مشكلة أذونات فعلية.هل هناك أي طريقة للتمييز بين خطأ الكتابة الفوقية أثناء الاستخدام وخطأ الكتابة الفوقية؟

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

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

المحلول

عليك الاتصال إنشاء ملف أولا لمعرفة ما إذا كان الملف قيد الاستخدام.

لمعرفة ما إذا كان الملف قيد الاستخدام:

إذا حصلت على مؤشر ملف صالح، فأنت تعلم أن الملف لا يحتوي على أذونات مشاركة متعارضة مع عملية لديها هذا الملف مفتوح بالفعل.

إذا قمت بتحديد عدم وصول المشاركة (0 إلى المعلمة dwShareMode لاستدعاء CreateFile)، فلن تحصل على مؤشر الملف إذا كانت هناك أي عملية أخرى تستخدم هذا الملف حاليًا بأي طريقة.سيعود GetLastError في هذه الحالة: ERROR_SHARING_VIOLATION (32)


لمعرفة ما إذا كانت هناك مشكلة أمنية في الوصول إلى الملف:

لمعرفة ما إذا كانت هناك مشكلة في أذونات الوصول إلى هذا الملف، سيفشل استدعاء CreateFile أيضًا ولكن باستخدام GetLastError مختلف.ستحصل: ERROR_ACCESS_DENIED (5)

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