[英]Recursive delete of files and directories in C#
如何在 C# 中遞歸刪除給定目錄? 包含文件的目錄。
System.IO.Directory.Delete與第二個參數true
是否可以解決問題?
編輯:
所以,我實際上確實回答了我自己的問題,盡管這里的答案更加清晰。 我首先提出這個問題的原因是,恰好調用Delete
(第二個參數設置為true
)的代碼沒有做它應該做的事情。 事實證明,其原因是在目錄層次結構中的某個位置設置了RO
屬性,而波蘭語版本的Windows XP
正在為此拋出一個非常奇怪的消息。
如果子目錄還包含文件,唯一對我有用的解決方案是使用遞歸函數:
public static void RecursiveDelete(DirectoryInfo baseDir)
{
if (!baseDir.Exists)
return;
foreach (var dir in baseDir.EnumerateDirectories())
{
RecursiveDelete(dir);
}
baseDir.Delete(true);
}
看起來 Directory.Delete(dir, true) 只刪除當前目錄的文件,如果它們是空的子目錄。
希望它可以幫助某人。
順便說一句,例如: RecursiveDelete( new DirectoryInfo(@"C:\\my_dir") );
是的,這就是該參數的重點。 您是否嘗試過並遇到任何問題? (我剛剛仔細檢查過,它對我來說很好用。)
如果您收到 UnauthorizedAccessException 。 您可以使用Jone Polvora中RecursiveDelete 的修改。 謝謝你的想法。 我會用的。
public static void RecursiveDelete(DirectoryInfo baseDir)
{
if (!baseDir.Exists)
return;
foreach (var dir in baseDir.EnumerateDirectories())
{
RecursiveDelete(dir);
}
var files = baseDir.GetFiles();
foreach (var file in files)
{
file.IsReadOnly = false;
file.Delete();
}
baseDir.Delete();
}
遞歸適用於文件和文件夾(奇怪的是,我認為它不適用於文件;我的壞...):
// create some nested folders...
Directory.CreateDirectory(@"c:\foo");
Directory.CreateDirectory(@"c:\foo\bar");
// ...with files...
File.WriteAllText(@"c:\foo\blap.txt", "blup");
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop");
// ...and delete them
Directory.Delete(@"c:\foo", true); // fine
來自@StayOnTarget 的修改解決方案,因此不會刪除根目錄:
public static void RecursiveDelete(DirectoryInfo baseDir, bool isRootDir)
{
if (!baseDir.Exists)
return;
foreach (var dir in baseDir.EnumerateDirectories()) RecursiveDelete(dir, false);
foreach (var file in baseDir.GetFiles())
{
file.IsReadOnly = false;
file.Delete();
}
if (!isRootDir) baseDir.Delete();
}
為什么不使用?
Directory.Delete(directoryPath, true);
https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.