Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

lunedì 17 luglio 2006

Cancellare ricorsivamente una directory

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

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ C# ]

Powered by:
Powered By Subtext Powered By ASP.NET