Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除文件夹和所有子文件夹以及文件_C#_File_Recursion_Directory_Delete File - Fatal编程技术网

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

C# 删除文件夹和所有子文件夹以及文件,c#,file,recursion,directory,delete-file,C#,File,Recursion,Directory,Delete File,可能重复: 我试图删除根文件夹中的所有文件和文件夹,但我的程序不断崩溃,因为有些文件超过了256或其他限制 我需要做的是转到最后一个文件夹,删除所有文件,然后删除该文件夹,然后一直到根文件夹,然后删除该文件夹 我被困在如何做到这一点请有人能帮助一个简单的方法来做到这一点 非常感谢你的帮助 我用的是C#, 代码是: private void RemoveDirectory(DirectoryInfo directory) { RemoveReadOnly(dire

可能重复:

我试图删除根文件夹中的所有文件和文件夹,但我的程序不断崩溃,因为有些文件超过了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));
    }

这与树木分类非常相似

您需要一个递归函数来深入到每个叶节点(一个没有子文件夹的文件夹),删除该叶中的所有文件,然后删除叶本身

基本伪代码是:

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
}

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

和目录:

[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool RemoveDirectory(string path);
并确保您拥有CharSet.Unicode,ansi会将您的路径限制为260(MAX_path)


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

要删除c:\temp目录:

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

您不能这样做是有原因的吗?

您使用的代码是什么,以及您的错误是什么?发布您的代码,发布异常详细信息,发布一些我们可以查看的内容,以便开始帮助。请参阅。类似问题:@Robar:No,这与SamWrighton类似:这可以是一个无限循环
,而(directoryExists)directoryExists=Directory.Exists(Directory.FullName)
因为
目录.Exists
不会改变任何东西。如果它解决了他的问题,他应该使用非托管函数。也许他选择了错误的问题,也许你是对的。我尝试过这个,但它没有删除文件夹或其任何内容
Directory.Delete(@"c:\temp", true);