• R/O
  • HTTP
  • SSH
  • HTTPS

CompleteEraser: Commit


Commit MetaInfo

Revisiond1af9e2add251d6d6ab71d361c7e6d0bd7054d90 (tree)
Time2012-08-13 04:46:49
Authorkonekoneko <jbh03215@gmai...>
Commiterkonekoneko

Log Message

リパースポイント、スパースファイルとして作成されたに対してはゼロフィルを行わないようにした
リパースポイントとして作成されたフォルダーを指定した場合、再帰的な破壊は行わないようにした

Change Summary

Incremental Difference

--- a/CompleteEraser/FileBreaker.cs
+++ b/CompleteEraser/FileBreaker.cs
@@ -25,13 +25,26 @@ namespace CompleteEraser
2525 public static void BreakFile(string file)
2626 {
2727 FileAttributes attr = File.GetAttributes(file);
28+
2829 if ((attr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
2930 File.SetAttributes(file, attr & ~FileAttributes.ReadOnly);
3031
31- string ext = Path.GetExtension(file);
32+ if ((attr & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint &&
33+ (attr & FileAttributes.SparseFile) != FileAttributes.SparseFile)
34+ FillFileContent(file);
35+
36+ string newFile = GenerateRandoName(Path.GetDirectoryName(file), Path.GetFileName(file).Length);
37+ if(File.Exists(newFile) == false)
38+ File.Move(file, newFile);
39+
40+ File.Delete(newFile);
41+ }
3242
43+ private static void FillFileContent(string file)
44+ {
3345 FileStream fs;
3446 FileInfo info = new FileInfo(file);
47+
3548 foreach (AlternateDataStreamInfo alt in info.ListAlternateDataStreams())
3649 {
3750 fs = alt.Open(FileMode.Open);
@@ -39,18 +52,14 @@ namespace CompleteEraser
3952 fs.Close();
4053 }
4154
42- fs = new FileStream(file, FileMode.Open,FileAccess.Write,FileShare.None,8,FileOptions.WriteThrough);
55+ string ext = Path.GetExtension(file);
56+
57+ fs = new FileStream(file, FileMode.Open, FileAccess.Write, FileShare.None, 8, FileOptions.WriteThrough);
4358 if (Settings.Default.AlwaysSlowSpeed || Settings.Default.SlowSpeedExt.IndexOf(ext) != -1)
4459 BreakFileSlowSpeed(fs);
4560 else
4661 BreakFileHiSpeed(fs);
4762 fs.Close();
48-
49- string newFile = GenerateRandoName(Path.GetDirectoryName(file), Path.GetFileName(file).Length);
50- if(File.Exists(newFile) == false)
51- File.Move(file, newFile);
52-
53- File.Delete(newFile);
5463 }
5564
5665 private static void BreakFileSlowSpeed(FileStream fs)
@@ -76,12 +85,16 @@ namespace CompleteEraser
7685
7786 public static void BreakFolder(string folder)
7887 {
79- IEnumerable<string> files = Directory.EnumerateFiles(folder, "*.*", SearchOption.TopDirectoryOnly);
80- foreach (string file in files)
81- BreakFile(file);
82- IEnumerable<string> dirs = Directory.EnumerateDirectories(folder, "*.*", SearchOption.TopDirectoryOnly);
83- foreach (string dir in dirs)
84- BreakFolder(dir);
88+ DirectoryInfo info = new DirectoryInfo(folder);
89+ if ((info.Attributes & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
90+ {
91+ IEnumerable<string> files = Directory.EnumerateFiles(folder, "*.*", SearchOption.TopDirectoryOnly);
92+ foreach (string file in files)
93+ BreakFile(file);
94+ IEnumerable<string> dirs = Directory.EnumerateDirectories(folder, "*.*", SearchOption.TopDirectoryOnly);
95+ foreach (string dir in dirs)
96+ BreakFolder(dir);
97+ }
8598 string newName = RenameFolderName(folder);
8699 Directory.Delete(newName);
87100 }
--- a/Document/help.txt
+++ b/Document/help.txt
@@ -5,6 +5,8 @@
55
66 ■制限事項
77 ・MFTレコードに収まるファイルの場合、完全に削除されないことがあります
8+・スパースファイル、リパースポイントとして作成されたファイルに対してゼロフィルは行いません
9+・リパースポイントとして作成されたフォルダーは適当な名前にリネーム後、リパースポイントのみを削除します
810
911 ■アルゴリズム
1012 ファイルを完全に削除したい場合、ファイルの内容を適当な文字で埋めてしまうのが一般的です
@@ -25,4 +27,4 @@ A.2001
2527
2628 ■連絡先
2729 サポートや新バージョンのリリースは以下のサイトで行っております
28-http://sourceforge.jp/projects/completeeraser
\ No newline at end of file
30+http://sourceforge.jp/projects/completeeraser
Show on old repository browser