В моем приложении я создал систему, в которой пользователи могут создавать галереи изображений. Фотографии хранятся в папках в формате category_name/gallery_name/{images} на диске. Каждая загруженная фотография сохраняется в соответствующей структуре каталогов, как указано выше.
При попытке удалить категорию, а также удалив из базы данных, я хочу также удалить соответствующие папки из системы. Когда я впервые получил сообщение об ошибке "Каталог не пуст", я искал и нашел это решение:
public static void DeleteDirectory(string target_dir)
{
string[] files = Directory.GetFiles(target_dir);
string[] dirs = Directory.GetDirectories(target_dir);
foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(target_dir, false);
}
С помощью этого решения фотографии в папке "gallery_name" будут удалены просто отлично, тогда сама папка gallery_name будет удалена. Поэтому мы теперь остаемся с пустой папкой category_name. Затем последний бит кода в приведенной выше подпрограмме (Directory.Delete(target_dir, false);
) вызывается для удаления папки category_name. Ошибка снова возникает.
Кто-нибудь знает об этом?
-
Directory.Delete(target_dir, true);
не работал, поэтому я попробовал альтернативу. - У меня есть полный контроль над родительской папкой, и папки категории_имя и gallery_name также создаются программно без каких-либо проблем.
- Как я уже упоминал, подкаталоги (папки галереи) и их содержимое (фотографии) удаляются с помощью этого кода. Это папка category_name, которая вызывает ошибку, хотя после этого кода это просто пустая папка.
Сообщение об ошибке, которое я получаю:
System.IO.IOException was unhandled by user code
HResult=-2147024751
Message=The directory is not empty.
Source=mscorlib
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive, Boolean checkHost)
at System.IO.Directory.Delete(String path)
at MyApp.PhotoGallery.Categories.deleteCategory(Int32 cID, String categoryname) in d:\Documents\My Dropbox\web projects\MyAppFolder\App_Code\BLL\PhotoGallery.vb:line 291
at _admhades_PhotoGallery.deleteCategory(Int32 categoryID, String categoryname) in d:\Documents\My Dropbox\web projects\HavadisPre\_admhades\PhotoGallery.aspx.vb:line 71