Удалить папку/файлы и подпапку
Я хочу удалить папку, содержащую файлы и подпапку, также содержащие файлы. Я использовал все, но это не работает для меня. Я использую следующую функцию в своем веб-приложении asp.net:
var dir = new DirectoryInfo(folder_path);
dir.Delete(true);
Иногда он удаляет папку, а иногда нет. Если вложенная папка содержит файл, она удаляет только файл, а не папку.
Ответы
Ответ 1
Это выглядит правильно: http://www.ceveni.com/2008/03/delete-files-in-folder-and-subfolders.html
//to call the below method
EmptyFolder(new DirectoryInfo(@"C:\your Path"))
using System.IO; // dont forget to use this header
//Method to delete all files in the folder and subfolders
private void EmptyFolder(DirectoryInfo directoryInfo)
{
foreach (FileInfo file in directoryInfo.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
{
EmptyFolder(subfolder);
}
}
Ответ 2
Directory.Delete(folder_path, recursive: true);
также даст вам желаемый результат и намного легче поймать ошибки.
Ответ 3
Я использую версию Visual Basic, потому что она позволяет использовать стандартные диалоги.
https://msdn.microsoft.com/en-us/library/24t911bf(v=vs.100).aspx
Ответ 4
Самый простой способ в моем опыте - это
Directory.Delete(folderPath, true);
Но у меня возникла проблема с этой функцией в сценарии, когда я пытаюсь создать одну и ту же папку сразу после ее удаления.
Directory.Delete(outDrawableFolder, true);
//Safety check, if folder did not exist create one
if (!Directory.Exists(outDrawableFolder))
{
Directory.CreateDirectory(outDrawableFolder);
}
Теперь, когда мой код пытается создать некоторый файл в outDrwableFolder, он заканчивается исключением. например, создание файла образа с помощью api Image.Save(имя файла, формат).
Как-то эта функция вспомогательной функции работает для меня.
public static bool EraseDirectory(string folderPath, bool recursive)
{
//Safety check for directory existence.
if (!Directory.Exists(folderPath))
return false;
foreach(string file in Directory.GetFiles(folderPath))
{
File.Delete(file);
}
//Iterate to sub directory only if required.
if (recursive)
{
foreach (string dir in Directory.GetDirectories(folderPath))
{
EraseDirectory(dir, recursive);
}
}
//Delete the parent directory before leaving
Directory.Delete(folderPath);
return true;
}
Ответ 5
Вы также можете сделать то же самое, используя метод экземпляра DirectoryInfo
. Я просто столкнулся с этой проблемой, и я считаю, что это также может решить вашу проблему.
var fullfilepath = Server.MapPath(System.Web.Configuration.WebConfigurationManager.AppSettings["folderPath"]);
System.IO.DirectoryInfo deleteTheseFiles = new System.IO.DirectoryInfo(fullfilepath);
deleteTheseFiles.Delete(true);
Для получения дополнительной информации посмотрите на эту ссылку, поскольку она выглядит так же.