object ITaskProcessor.Process(DeleteTask task) { ProcessBaseTask(task); task.PathToDelete = ProcessString(task.PathToDelete); return null; }
object ITaskProcessor.Process(DeleteTask task) { if(task == null) return null; List<string> files = new List<string>(); List<string> directories = new List<string>(); try { if(!string.IsNullOrEmpty(task.RelatedTaskId)) { if(!processedFilesDict.ContainsKey(task.RelatedTaskId)) return new InvalidOperationException(string.Format("Task id not found: {0}", task.RelatedTaskId)); if(!task.OnlyFiles) directories.AddRange(processedDirectoriesDict[task.RelatedTaskId]); files.AddRange(processedFilesDict[task.RelatedTaskId]); } if(!string.IsNullOrEmpty(task.PathToDelete)) { if(File.Exists(task.PathToDelete)) { files.Add(task.PathToDelete); } else if(Directory.Exists(task.PathToDelete)) { if(!task.OnlyFiles) { directories.Add(task.PathToDelete); directories.AddRange(Directory.GetDirectories(task.PathToDelete, "*", task.Recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)); } files.AddRange(Directory.GetFiles(task.PathToDelete, "*", task.Recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)); } else { return new FileNotFoundException(task.PathToDelete); } } foreach(var file in files) { try { if(File.Exists(file)) { File.SetAttributes(file, FileAttributes.Normal); File.Delete(file); } } catch(Exception ex) { Console.WriteLine("Delete error skipped: {0}", ex.ToString()); } } for(int i = directories.Count - 1; i >= 0; i--) { var dir = directories[i]; try { if(Directory.Exists(dir)) { Directory.Delete(dir); } } catch(Exception ex) { Console.WriteLine("Delete error skipped: {0}", ex.ToString()); } } return null; } catch(Exception ex) { return ex; } }