OSDN Git Service

一部環境でごみ箱に完全に削除する項目が表示されない不具合を修正した
[completeeraser/CompleteEraser.git] / CompleteEraser / ShrredFiles.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.IO;\r
4 using System.Threading;\r
5 using System.Threading.Tasks;\r
6 \r
7 namespace CompleteEraser\r
8 {\r
9     class ShrredFiles : IOperation\r
10     {\r
11         public event ProgressingEventHandler Progressing;\r
12         public event ProgressedEventHandler Progressed;\r
13         public event EventHandler Complete;\r
14 \r
15         public async void ExecuteAsync(IEnumerable<string> files, CancellationToken cancelToken)\r
16         {\r
17             foreach (string file in files)\r
18             {\r
19                 Progressing(this, new ProgressingEventArgs(file));\r
20 \r
21             RETRY:\r
22                 ProgressedEventArgs e = new ProgressedEventArgs(file, null);\r
23 \r
24                 try\r
25                 {\r
26                     await Task.Factory.StartNew(() =>\r
27                     {\r
28                         FileBreaker.BreakFileOrFolder(file);\r
29                     }, cancelToken);\r
30                 }\r
31                 catch (OperationCanceledException)\r
32                 {\r
33                     break;\r
34                 }\r
35                 catch (UnauthorizedAccessException uae)\r
36                 {\r
37                     e.ex = uae;\r
38                 }\r
39                 catch (IOException ie)\r
40                 {\r
41                     e.ex = ie;\r
42                 }\r
43                 Progressed(this, e);\r
44                 if (e.retry)\r
45                     goto RETRY;\r
46                 if (e.breaked)\r
47                     break;\r
48             }\r
49             this.Complete(this, null);\r
50         }\r
51     }\r
52 }\r