私のアプリでは、ユーザーが画像ギャラリーを作成できるシステムを構築しました。ディスク上の category_name/gallery_name/{pictures} の形式のフォルダーに保持されている写真。アップロードされた各写真は、上記の関連するディレクトリ構造に保存されます。
ただし、カテゴリを削除しようとすると、データベースから削除するだけでなく、関連するフォルダーもシステムから削除したいと思います。「ディレクトリが空ではありません」というエラーメッセージを最初に受け取ったとき、検索して次の解決策を見つけました。
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);
うまくいかなかったので、別の方法を試しました。- 親フォルダーを完全に制御でき、category_name フォルダーと gallery_name フォルダーもプログラムで問題なく作成されます。
- 前述したように、サブ ディレクトリ (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