c# - 尝试以编程方式删除文件夹时出现 "Directory is not empty"错误

标签 c# asp.net

在我的应用中,我构建了一个系统,用户可以在其中创建图片库。照片以 category_name/gallery_name/{pictures} 格式保存在磁盘上的文件夹中。每张上传的照片都存储在上面给出的相关目录结构下。

虽然尝试删除类别以及从数据库中删除时,我也想从系统中删除相关文件夹。当我第一次收到错误消息“目录不为空”时,我 searched and found这个解决方案:

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 文件夹。错误再次出现..

有谁知道解决这个问题的方法吗?

  1. Directory.Delete(target_dir, true); 没有用,这就是我尝试替代方法的原因。
  2. 我可以完全控制父文件夹,而且 category_name 和 gallery_name 文件夹也是以编程方式创建的,没有任何问题。
  3. 正如我提到的,子目录(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

最佳答案

您可以只使用 Directory.Delete(target_dir, true); 递归地删除目录和所有文件。您不必编写自定义函数。

关于c# - 尝试以编程方式删除文件夹时出现 "Directory is not empty"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415105/

相关文章:

c# - 在枚举另一个集合的同时修改一个集合

c# - 使用键名从 ModelState 获取值

c# - 如何通过继承向类添加属性,然后将基类转换为新类?

c# - 如何从 C# 中的数据库获取用户名和密码?

c# - Exchange Web 服务中的多个日历

c# - WebSocket 安全连接自签名证书

c# - 从 C# 控制 IE?

javascript - 如何在 javascript 文件中使用 ASP.NET Resource(.resx) 字符串

asp.net - 当页面加载是 AJAX 历史记录点的结果时,如何检测客户端?

asp.net - ASP.NET 或 HTML 页面中的 PDFTron Web 查看器 - 加载 pdf 或 xod 显示错误