Padam sepenuhnya direktori: had dan penyelesaian kaedah Direktori.Padam(benar)
Apabila menggunakan Directory.Delete(myPath, true)
untuk memadamkan direktori secara rekursif, pembangun mungkin masih menemui pengecualian "direktori tidak kosong" walaupun recursive
ditetapkan kepada true
. Ini membingungkan kerana kaedah ini bertujuan untuk memadam semua kandungan direktori sebelum memadamkannya.
Analisis Punca
Tingkah laku dalam soalan timbul daripada batasan kaedah Directory.Delete
. Kaedah ini direka untuk hanya membenarkan direktori kosong dipadamkan, manakala fail dan subdirektori dalam direktori sasaran tidak terjejas. Apabila recursive
ialah true
, Directory.Delete
akan cuba memadam mana-mana subdirektori yang tidak kosong, tetapi tidak akan memadamkan fail.
Penyelesaian
Untuk menyelesaikan masalah ini, anda boleh menggunakan fungsi rekursif yang memadamkan fail dan subdirektori secara eksplisit sebelum cuba memadamkan direktori induk. Coretan kod berikut menunjukkan pendekatan ini:
<code class="language-csharp">public static void DeleteDirectory(string target_dir) { string[] files = Directory.GetFiles(target_dir); string[] directories = Directory.GetDirectories(target_dir); foreach (string file in files) { File.Delete(file); // 删除所有文件 } foreach (string directory in directories) { DeleteDirectory(directory); // 递归删除子目录 } Directory.Delete(target_dir, false); // 删除空父目录 }</code>
Dengan memadamkan fail dan subdirektori terlebih dahulu secara eksplisit, kami memastikan direktori induk kosong sebelum cuba memadamkannya. Pendekatan ini menyelesaikan pengecualian "direktori tidak kosong" yang berlaku apabila menggunakan Directory.Delete(true)
.
Atas ialah kandungan terperinci Mengapakah Directory.Delete(true) Membuang 'Direktori Tidak Kosong'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!