コード例 #1
0
 object ITaskProcessor.Process(DeleteTask task) {
     ProcessBaseTask(task);
     task.PathToDelete = ProcessString(task.PathToDelete);
     return null;
 }
コード例 #2
0
ファイル: TaskExecutor.cs プロジェクト: DunkanDX/Hagbis.Build
 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;
     }
 }