"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يقوم File.delete() بإرجاع خطأ على الرغم من وجود الملف والأذونات؟

لماذا يقوم File.delete() بإرجاع خطأ على الرغم من وجود الملف والأذونات؟

تم النشر بتاريخ 2024-11-17
تصفح:267

Why Does File.delete() Return False Despite File Existence and Permissions?

يقوم File.delete() بإرجاع خطأ على الرغم من الوجود والتحقق من الأذونات

عند محاولة حذف ملف بعد الكتابة إليه باستخدام FileOutputStream، يواجه بعض المستخدمين مشكلة غير متوقعة حيث file.delete() يُرجع خطأ. يحدث هذا على الرغم من وجود الملف وجميع عمليات التحقق من الأذونات (.exists()، .canRead()، .canWrite()، .canExecute()) التي تُرجع صحيحًا.

بعد مزيد من التحقيق، يبدو أن هناك خطأ خفيًا موجود في Java، مما قد يمنع الحذف الناجح للملف حتى عند استيفاء جميع الشروط الضرورية. لحل هذه المشكلة، من المهم استدعاء System.gc() قبل حذف الملف.

يدمج مقتطف التعليمات البرمجية التالي هذا الحل في طريقة writeContent الأصلية:

private void writeContent(ملف ملف، سلسلة fileContent) {
    FileOutputStream إلى؛
    يحاول {
        to = new FileOutputStream(file);
        to.write(fileContent.getBytes());
        to.flush();
        to. Close();
    } قبض على (FileNotFoundException ه) {
        // TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
        printStackTrace();
    } قبض (IOException ه) {
        // TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
        printStackTrace();
    } أخيراً {
        يحاول {
            to. Close(); // أغلق الدفق كما كان من قبل
            System.gc(); // اتصل بـ System.gc() لفرض جمع البيانات المهملة
        } قبض (IOException ه) {
            // TODO التعامل مع IOException
        }
    }
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3