OSDN Git Service

MFTのレコードサイズより小さい場合のゼロフィルが不完全だった点を修正した
authorkonekoneko <jbh03215@gmail.com>
Sat, 28 Jul 2012 22:43:48 +0000 (07:43 +0900)
committerkonekoneko <jbh03215@gmail.com>
Sat, 28 Jul 2012 22:43:48 +0000 (07:43 +0900)
CompleteEraser/FileBreaker.cs

index f19ee4f..fe7f359 100644 (file)
@@ -53,22 +53,35 @@ namespace CompleteEraser
 \r
         private static void BreakFileSlowSpeed(FileStream fs)\r
         {\r
-            byte[] data = new byte[Settings.Default.FillLengthAtHiSpeed];\r
+            if (BreakFileInMFTArea(fs))\r
+                return;\r
             fs.Seek(0, SeekOrigin.Begin);\r
+            byte[] data = new byte[Settings.Default.FillLengthAtHiSpeed];\r
             for (long i = 0; i < fs.Length; i += data.Length)\r
                 fs.Write(data,0,data.Length);\r
         }\r
 \r
         private static void BreakFileHiSpeed(FileStream fs)\r
         {\r
+            if (BreakFileInMFTArea(fs))\r
+                return;\r
             fs.Seek(0, SeekOrigin.Begin);\r
-\r
             byte[] data = new byte[Settings.Default.FillLengthAtHiSpeed];\r
             fs.Write(data, 0, data.Length);\r
             fs.Seek(-data.Length, SeekOrigin.End);\r
             fs.Write(data, 0, data.Length);\r
         }\r
 \r
+        private static bool BreakFileInMFTArea(FileStream fs)\r
+        {\r
+            if (fs.Length >= 1024)  //MFTのレコードサイズ以上か\r
+                return false;\r
+            fs.Seek(0, SeekOrigin.Begin);\r
+            byte[] data = new byte[fs.Length];\r
+            fs.Write(data, 0, data.Length);\r
+            return true;\r
+        }\r
+\r
         public static void BreakFolder(string folder)\r
         {\r
             IEnumerable<string> files = Directory.GetFiles(folder, "*.*", SearchOption.AllDirectories);\r