删除文件夹和所有子文件夹以及文件

时间:2012-03-15 13:44:39

标签: c# file recursion directory delete-file

  

可能重复:
  Recursive delete of files and directories in C#

我正在尝试删除根文件夹中的所有文件和文件夹,但我的程序一直崩溃,因为某些文件超过了256或某些限制。

我需要做的是转到最后一个文件夹删除所有文件,然后删除该文件夹并按照我的方式直到根文件夹然后将其删除。

我一直坚持如何做到这一点请有人帮忙用一种简单的方法来做到这一点吗?

非常感谢您的帮助

我正在使用C#, 代码是:

    private void RemoveDirectory(DirectoryInfo directory)
    {
        RemoveReadOnly(directory);

        directory.Delete(true);

        bool directoryExists = true;

        while (directoryExists)
            directoryExists = Directory.Exists(directory.FullName);

        SendProgressMessage(string.Format("Removed {0}", directory.FullName));
    }

3 个答案:

答案 0 :(得分:1)

你应该使用以下围绕shell api的函数(如果错误是路径长度为256个字符):

[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool DeleteFile(string path);

目录:

[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool RemoveDirectory(string path);

并确保您拥有CharSet.Unicode,ansi将限制您的路径260(MAX_PATH)。

http://msdn.microsoft.com/en-us/library/aa363915%28VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/aa365488%28v=vs.85%29.aspx

此函数可以将较长的路径删除为256个字符。

答案 1 :(得分:1)

删除c:\ temp目录:

Directory.Delete(@"c:\temp", true);

你有没有理由不这样做?

答案 2 :(得分:0)

这与树类等非常相似。

你需要一个递归函数来获取每个叶子节点(没有子文件夹的文件夹)并删除该叶子中的所有文件,然后删除叶子本身。

基本伪代码是:

function main()
{
    deleteNode(first node);
}

function deleteNode(node)
{
    foreach(child in node.children)
    {
        deleteNode(child);
        delete the child which should now be empty
    }

    delete all files in this node
}