Pengecualian disebabkan oleh kaedah Directory.GetFiles disebabkan oleh sekatan akses
Apabila mengakses sistem fail rangkaian atau sistem fail dalam persekitaran terkawal, anda mungkin menghadapi akses terhad kepada folder tertentu. Ini menyebabkan kaedah seperti Directory.GetFiles membuang pengecualian, mengganggu pelaksanaan program.
Analisis Masalah
Apabila kaedah Directory.GetFiles menemui direktori yang tidak boleh diakses, ia akan membuang pengecualian UnauthorizedAccessException. Malangnya, sebelum menangkap pengecualian ini, kaedah telah gagal dan tidak dapat pulih.
Penyelesaian: Kesan direktori satu demi satu
Untuk menyelesaikan masalah ini, disyorkan untuk menyiasat satu direktori pada satu masa dan bukannya mencari secara rekursif keseluruhan pepohon direktori. Dengan cara ini, anda boleh menangkap dan mengendalikan pengecualian berdasarkan setiap direktori, mengelakkan penamatan program pramatang.
Contoh pelaksanaan
Berikut ialah kaedah contoh yang berulang melalui pepohon direktori dan menambah laluan fail pada senarai, tidak termasuk fail daripada direktori yang dinafikan akses:
<code class="language-csharp">private static void AddFiles(string path, IList<string> files) { try { foreach (string file in Directory.GetFiles(path)) { files.Add(file); } foreach (string subdirectory in Directory.GetDirectories(path)) { AddFiles(subdirectory, files); } } catch (UnauthorizedAccessException ex) { // 忽略无法访问的目录,继续处理其他目录 } }</code>
Kaedah ini memastikan program meneruskan pelaksanaan walaupun ia menemui direktori yang tidak mempunyai akses, membolehkan anda memproses fail dalam direktori yang mempunyai akses. Versi yang dipertingkatkan ini mengelakkan penggunaan ToList().ForEach()
dan menggunakan gelung foreach
yang lebih jelas dan mudah dibaca, meningkatkan kebolehselenggaraan kod.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan UnauthorizedAccessException Apabila Menggunakan Directory.GetFiles?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!