c#删除文件夹(目录)

在用Directory.Delete删除文件夹时,报“目录不是空的。"异常。

如果要删除的文件夹下还有文件夹或者文件,就会报目录不是空的的异常,如何删除文件夹以及文件夹内的所有文件夹和文件呢?

解决办法1

System.IO.Directory.Delete(@"C:/Temp", true); 就可以删除了注意C:/Temp后面没有/

Directory.Delete (String, Boolean)

 

作用:删除指定的目录并(如果指示)删除该目录中的任何子目录。

 

解决办法2

使用递归方法:下面给出两种使用递归删除目录的代码

public static void DeleteFolder(string dir)
        {
            foreach (string d in Directory.GetFileSystemEntries(dir))
            {
                if (File.Exists(d))
                {
                    FileInfo fi = new FileInfo(d);
                    if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
                        fi.Attributes = FileAttributes.Normal;
                    File.Delete(d);//直接删除其中的文件   
                }
                else
                    DeleteFolder(d);//递归删除子文件夹   
            }
            Directory.Delete(dir);//删除已空文件夹   
        }


        private void DeleteDir(string path)
        {
            if (path.Trim() == "" || !Directory.Exists(path))
                return;
            DirectoryInfo dirInfo = new DirectoryInfo(path);

            FileInfo[] fileInfos = dirInfo.GetFiles();
            if (fileInfos != null && fileInfos.Length > 0)
            {
                foreach (FileInfo fileInfo in fileInfos)
                {
                    //DateTime.Compare( fileInfo.LastWriteTime,DateTime.Now);
                    File.Delete(fileInfo.FullName); //删除文件
                }
            }

            DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
            if (dirInfos != null && dirInfos.Length > 0)
            {
                foreach (DirectoryInfo childDirInfo in dirInfos)
                {
                    this.DeleteDir(childDirInfo.FullName); //递归
                }
            }
            Directory.Delete(dirInfo.FullName, true); //删除目录
        }

<h4 class="subHeading" style="margin: 0px; padding: 0px;">参数</h4><dl><dt><span class="parameter">path</span></dt><dd><p>要移除的目录的名称。</p></dd></dl><dl><dt><span class="parameter">recursive</span></dt><dd><p>
若要移除 <span class="parameter">path</span> 中的目录、子目录和文件,则为 <strong>true</strong>;否则为 <strong>false</strong>。</p><p> </p></dd></dl>

<span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">void</span> Delete (
    <span style="color: blue;">string</span> path,
    <span style="color: blue;">bool</span> recursive
)
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px;">转自:</span><a target=_blank href="http://www.itpuji.net.cn/course/show3.php?id=689" style="color: rgb(51, 102, 153); text-decoration: none; font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px;">http://www.itpuji.net.cn/course/show3.php?id=689</a>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中获取WMI共享文件夹的物理目录是通过查询Win32_Share类来实现的。以下是一个实现的示例代码: 首先,您需要进行以下引用: ```csharp using System.Management; ``` 然后,您可以使用以下代码来获取WMI共享文件夹的物理路径: ```csharp public static string GetSharedFolderPath(string shareName) { string folderPath = ""; ManagementScope scope = new ManagementScope(); try { // 连接WMI命名空间 scope.Connect(); ObjectQuery query = new ObjectQuery($"SELECT Path FROM Win32_Share WHERE Name = '{shareName}'"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection sharedFolders = searcher.Get(); foreach (ManagementObject sharedFolder in sharedFolders) { folderPath = sharedFolder["Path"].ToString(); break; // 如果只有一个共享文件夹,您可以删除这一行 } } catch (ManagementException ex) { // 处理异常 Console.WriteLine("An error occurred while querying WMI: " + ex.Message); } return folderPath; } ``` 您可以调用此方法并传递共享文件夹的名称参数,例如: ```csharp string sharedFolderPath = GetSharedFolderPath("ShareName"); Console.WriteLine("Shared folder path: " + sharedFolderPath); ``` 此代码将返回共享文件夹的物理路径,并将其打印到控制台。如果有多个具有相同名称的共享文件夹,该代码将仅返回第一个找到的共享文件夹的物理路径。 请注意,您需要具有适当的权限才能查询WMI。如果遇到权限问题,请确保您的应用程序以管理员权限运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值