2009-10-25 10 views

Respuesta

44

Para ampliar la respuesta de Henk, necesita:

string rootFolderPath = @"C:\\SomeFolder\\AnotherFolder\\FolderCOntainingThingsToDelete"; 
string filesToDelete = @"*DeleteMe*.doc"; // Only delete DOC files containing "DeleteMe" in their filenames 
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete); 
foreach(string file in fileList) 
{ 
    System.Diagnostics.Debug.WriteLine(file + "will be deleted"); 
// System.IO.File.Delete(file); 
} 

tener mucho cuidado!

Tenga en cuenta que he comentado el comando de eliminación. Ejecútelo y pruébelo cuidadosamente antes de dejar que realmente elimine nada.

Si desea eliminar recursivamente archivos en TODAS las subcarpetas de la carpeta raíz, agregue, System.IO.SearchOption.AllDirectories); a la llamada GetFiles.

Si hace esto también es una muy buena ideaa negarse a ejecutar si el rootFolderPath es menor de aproximadamente 4 caracteres de longitud (una simple protección contra la supresión de todo en C: \ - He estado allí y hecho y que no es divertido !!!)

+2

Y no olvide capturar excepciones, manejar situaciones en las que el archivo está en uso, o se deniega el acceso, etc. – Bryan

+1

Sí, ese bit lo dejé como ejercicio para el lector ;-) –

+0

Gracias. Se agregaron las excepciones de captura también. – user

8

Puede usar System.IO.Directory.GetFiles() en una lista de archivos, en formato de cadena [].

continuación, puede utilizar System.IO.File.ReadAllText() para leer archivos completos, o si son muy grandes, abrir una TextReader con System.IO.File.OpenText().

Si está buscando una palabra clave literal, String.Contains() es todo lo que necesita.

La eliminación de un archivo se puede hacer con System.IO.File.Delete(). Asegúrate de que el archivo esté cerrado nuevamente.

Editar, 2 ejemplos de GetFiles():

string[] fileNames = System.IO.Directory.GetFiles(@"C:\"); 
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys"); 
+0

Whoops, supongo que debería haberlo dicho un poco diferente. No necesito verificar dentro del archivo en sí, sino solo el nombre del archivo. – user

+0

A continuación, puede omitir los pasos de ReadAllText/TextReader. –

+0

No es necesario leer todo el texto. P.ej. si File comienza con Apple y tiene 50mb ... La mejor manera es leer los archivos secuencialmente con la ventana deslizante. –

5

Más o menos, esto:

string DeleteThis = "apple"; 
string[] Files = Directory.GetFiles(@"C:\Folder"); 

foreach (string file in Files) 
{ 
    if (file.ToUpper().Contains(DeleteThis.ToUpper())) 
    { 
     File.Delete(file); 
    } 
} 
0
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); }); 
4
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { 
    if (file.IndexOf("apple", StringComparison.OrdinalIgnoreCase) >= 0) 
     File.Delete(file); 
}); 

o

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { 
    Regex re = new Regex("apple", RegexOptions.IgnoreCase); 
    if (re.IsMatch(file)) 
     File.Delete(file); 
}); 
Cuestiones relacionadas