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

本文关键字:文件夹 文件 删除 | 更新日期: 2023-09-27 18:28:06

可能重复:
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));
    }

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

要删除c:''temp目录:

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

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

您应该使用以下绕过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个字符的较长路径。

这与树排序等非常相似。

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

基本伪代码是:

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
}