删除文件夹和所有子文件夹以及文件
本文关键字:文件夹 文件 删除 | 更新日期: 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
}