file.replace رمي ioException
-
24-09-2019 - |
سؤال
لديّ تطبيق يمكن أن يجعل تعديل الصور. في بعض الحالات ، هذا يجعل الملفات أصغر ، في بعض الحالات أكبر.
لا يحتوي البرنامج على خيار "عدم استبدال الملف إذا كانت النتيجة تحتوي على ملفات أكبر".
لذلك كتبت تطبيق C# صغير لمحاولة حل هذا.
بدلاً من الكتابة فوق الملفات ، أجعل التطبيق يكتب النتيجة إلى مجلد تحت المجال الحالي واسم اختبار المجلد هذا.
يقوم تطبيق C# الذي كتبته بمقارنة الاستيلاء على محتويات كلا المجلدين ويضع المسار الكامل للملف (الملفات) في كائنين قائمة. ثم أقارن واستبدال.
الاستبدال لا يعمل. أحصل على ioexception التالية:
غير قادر على إزالة الملف المراد استبداله
الموقع على القيادة الصلبة الخارجية ، ولدي حقوقه الكاملة.
الآن ، أعلم أنه يمكنني فقط القيام بالملف. لماذا هذا الإعداد المعين لن يعمل.
هذا هو رمز المصدر: http://pastebin.com/4VQ82UMU
ونعم ، الملف المحدد كوسيطة الأخيرة لوظيفة استبدال موجودة.
المحلول
تحقق من أن ملفك الذي سيتم استبداله لم يتم تحميله في الذاكرة ، مما قد يتسبب في قفل في الملف
حاول استخدام عبارة باستخدام للتخلص تلقائيًا من المورد ،
وفقا للوثائق:
إذا كان DestinationBackUpFilename على محرك أقراص مختلف ، فلا تتم إزالته كما ينص الوثائق ، بدلاً من ذلك يتم إلقاء ioException برسالة "غير قادر على إزالة الملف المراد استبداله." هذا خطئ