L'oggetto Directory contenuto nel namespace System.IO espone un metoto, Delete, che con un opportuno parametro consente di cancellare ricorsivamente tutte le directory, i file e le sottodirectory in essa contenute. Tuttavia, nel caso in cui un file abbia l'attributo di sola lettura, l'operazione fallisce. In questo caso è necessario ricorrere ad una cara funzione ricorsiva che, prima della cancellazione di ogni file, ne imposta l'attributo su Archivio:
using System;
using System.IO;
namespace SystemControl
{
public static class Cleaner
{
private static void DeleteFiles(DirectoryInfo di, bool DeleteDirectory)
{
foreach (FileInfo f in di.GetFiles())
{
try
{
//Imposta l'attributo di archivio per il file prima di eliminarlo.
File.SetAttributes(f.FullName, FileAttributes.Archive);
f.Delete();
}
catch
{ }
}
foreach (DirectoryInfo d in di.GetDirectories())
{
//Richiama ricorsivamente la funzione per eliminare tutte le sottodirectory.
DeleteFiles(d, true);
}
if (DeleteDirectory)
di.Delete();
}
public static void Delete(DirectoryInfo di)
{
//Elimina tutti i file contenuti nella directory specificata.
DeleteFiles(di, false);
}
public static void Delete(Directory path)
{
//Elimina tutti i file contenuti nella directory specificata.
DeleteFiles(new DirectoryInfo(path), false);
}
}
}
powered by IMHO 1.3