2012-08-10 15 views
5

Tengo una unidad habilitada para cuotas y quiero eliminar todos los archivos creados por un usuario específico (en realidad, un conjunto de aplicaciones que se ejecuta con una cuenta especial) desde esa unidad. ¿Cómo puedo hacer esto sin verificar recursivamente todos los archivos y carpetas en HDD si fue creado por un usuario específico o no? Solo necesito obtener "iterador".Eliminar todos los archivos creados por el usuario especificado

+0

¿Se refiere al * propietario del archivo *? –

+0

Programmatically Creo que necesitaría iterar todos los archivos de su controlador. Tal vez podría cambiar esta pregunta para ver si los servidores pueden ayudarlo mejor. –

Respuesta

2

echar un vistazo en siguiente ejemplo

[Test] 
    public void Test() 
    { 
     string user = @"Domain\UserName"; 
     var files = Directory.EnumerateFiles(@"C:\TestFolder") 
      .Where(x => IsOwner(x, user)); 
     Parallel.ForEach(files, File.Delete); 
    } 

    private static bool IsOwner(string filePath, string user) 
    { 
     return string.Equals(File.GetAccessControl(filePath).GetOwner(typeof (NTAccount)).Value, user, 
          StringComparison.OrdinalIgnoreCase); 
    } 
+0

Hmm, parece que no hay forma de obtener esta lista sin iterar cada archivo en el disco duro. Vale gracias) – Alexus

1

En términos de mejorar el rendimiento, creo que podría utilizar la Biblioteca de tareas paralelas cuando use algoritmos recursivos para buscar archivos y carpetas.

Otra forma, que podría hacer que Lucence era un marco útil para la búsqueda y que ya se publicó la versión para .NET

+0

TPL e IO, ¿no SSD? Para muchos archivos, los resultados serán mucho peores que sin TPL ... –

1

En realidad, se puede hacer eso iterativamente y muy utilizando eficientemente USN Change Journal, vea http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspx. Con un uso adecuado del filtrado, puede obtener una lista de archivos creados por un usuario específico dentro de un período de tiempo específico.

Por otro lado, esta técnica es bastante complicada y es adecuada para aplicaciones de tiempo crítico; si la eficiencia no es el punto focal de su aplicación, elegiría una solución más simple.

Cuestiones relacionadas