using System; using System.IO; using System.Threading; using System.Diagnostics; using System.Linq; class Program { static void Main() { string path = "tuArchivo.txt"; int maxIntentos = 3; bool archivoEliminado = false; for (int intento = 0; intento < maxIntentos && !archivoEliminado; intento++) { try { // Intenta eliminar el archivo. File.Delete(path); archivoEliminado = true; Console.WriteLine("Archivo eliminado exitosamente."); } catch (IOException e) { Console.WriteLine($"No se pudo eliminar el archivo. Intento {intento + 1} de {maxIntentos}."); // Intenta terminar el proceso que puede estar bloqueando el archivo. if (intento < maxIntentos - 1) // Evita buscar el proceso en el último intento. { TerminarProcesoBloqueante(path); } Thread.Sleep(1000); // Espera un segundo antes del próximo intento. } } if (!archivoEliminado) { Console.WriteLine($"No se pudo eliminar el archivo después de {maxIntentos} intentos."); } } static void TerminarProcesoBloqueante(string filePath) { var tool = new ProcessStartInfo { FileName = "handle.exe", Arguments = filePath + " /accepteula", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true }; using (var process = Process.Start(tool)) { using (var reader = process.StandardOutput) { string result = reader.ReadToEnd(); string[] lines = result.Split('\n'); foreach (var line in lines) { if (line.Contains("pid:")) { // Extrae el PID del proceso y lo termina. int pidStart = line.IndexOf("pid:") + 4; int pidEnd = line.IndexOf(' ', pidStart); int pid = int.Parse(line.Substring(pidStart, pidEnd - pidStart)); Process.GetProcessById(pid).Kill(); Console.WriteLine($"Proceso {pid} terminado."); break; } } } } } }