OSDN Git Service

リパースポイント、スパースファイルとして作成されたに対してはゼロフィルを行わないようにした
authorkonekoneko <jbh03215@gmail.com>
Sun, 12 Aug 2012 19:46:49 +0000 (04:46 +0900)
committerkonekoneko <jbh03215@gmail.com>
Sun, 12 Aug 2012 19:46:49 +0000 (04:46 +0900)
リパースポイントとして作成されたフォルダーを指定した場合、再帰的な破壊は行わないようにした

CompleteEraser/FileBreaker.cs
Document/help.txt

index 7590268..c9986f8 100644 (file)
@@ -25,13 +25,26 @@ namespace CompleteEraser
         public static void BreakFile(string file)\r
         {\r
             FileAttributes attr = File.GetAttributes(file);\r
+\r
             if ((attr & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)\r
                 File.SetAttributes(file, attr & ~FileAttributes.ReadOnly);\r
 \r
-            string ext = Path.GetExtension(file);\r
+            if ((attr & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint &&\r
+                (attr & FileAttributes.SparseFile) != FileAttributes.SparseFile)\r
+                FillFileContent(file);\r
+            \r
+            string newFile = GenerateRandoName(Path.GetDirectoryName(file), Path.GetFileName(file).Length);\r
+            if(File.Exists(newFile) == false)\r
+                File.Move(file, newFile);\r
+            \r
+            File.Delete(newFile);\r
+        }\r
 \r
+        private static void FillFileContent(string file)\r
+        {\r
             FileStream fs;\r
             FileInfo info = new FileInfo(file);\r
+\r
             foreach (AlternateDataStreamInfo alt in info.ListAlternateDataStreams())\r
             {\r
                 fs = alt.Open(FileMode.Open);\r
@@ -39,18 +52,14 @@ namespace CompleteEraser
                 fs.Close();\r
             }\r
 \r
-            fs = new FileStream(file, FileMode.Open,FileAccess.Write,FileShare.None,8,FileOptions.WriteThrough);\r
+            string ext = Path.GetExtension(file);\r
+\r
+            fs = new FileStream(file, FileMode.Open, FileAccess.Write, FileShare.None, 8, FileOptions.WriteThrough);\r
             if (Settings.Default.AlwaysSlowSpeed || Settings.Default.SlowSpeedExt.IndexOf(ext) != -1)\r
                 BreakFileSlowSpeed(fs);\r
             else\r
                 BreakFileHiSpeed(fs);\r
             fs.Close();\r
-\r
-            string newFile = GenerateRandoName(Path.GetDirectoryName(file), Path.GetFileName(file).Length);\r
-            if(File.Exists(newFile) == false)\r
-                File.Move(file, newFile);\r
-            \r
-            File.Delete(newFile);\r
         }\r
 \r
         private static void BreakFileSlowSpeed(FileStream fs)\r
@@ -76,12 +85,16 @@ namespace CompleteEraser
 \r
         public static void BreakFolder(string folder)\r
         {\r
-            IEnumerable<string> files = Directory.EnumerateFiles(folder, "*.*", SearchOption.TopDirectoryOnly);\r
-            foreach (string file in files)\r
-                BreakFile(file);\r
-            IEnumerable<string> dirs = Directory.EnumerateDirectories(folder, "*.*", SearchOption.TopDirectoryOnly);\r
-            foreach (string dir in dirs)\r
-                BreakFolder(dir);\r
+            DirectoryInfo info = new DirectoryInfo(folder);\r
+            if ((info.Attributes & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)\r
+            {\r
+                IEnumerable<string> files = Directory.EnumerateFiles(folder, "*.*", SearchOption.TopDirectoryOnly);\r
+                foreach (string file in files)\r
+                    BreakFile(file);\r
+                IEnumerable<string> dirs = Directory.EnumerateDirectories(folder, "*.*", SearchOption.TopDirectoryOnly);\r
+                foreach (string dir in dirs)\r
+                    BreakFolder(dir);\r
+            }\r
             string newName = RenameFolderName(folder);\r
             Directory.Delete(newName);\r
         }\r
index 0dd3f41..2759d0b 100644 (file)
@@ -5,6 +5,8 @@
 \r
 \81¡\90§\8cÀ\8e\96\8d\80\r
 \81EMFT\83\8c\83R\81[\83h\82É\8eû\82Ü\82é\83t\83@\83C\83\8b\82Ì\8fê\8d\87\81A\8a®\91S\82É\8dí\8f\9c\82³\82ê\82È\82¢\82±\82Æ\82ª\82 \82è\82Ü\82·\r
+\81E\83X\83p\81[\83X\83t\83@\83C\83\8b\81A\83\8a\83p\81[\83X\83|\83C\83\93\83g\82Æ\82µ\82Ä\8dì\90¬\82³\82ê\82½\83t\83@\83C\83\8b\82É\91Î\82µ\82Ä\83[\83\8d\83t\83B\83\8b\82Í\8ds\82¢\82Ü\82¹\82ñ\r
+\81E\83\8a\83p\81[\83X\83|\83C\83\93\83g\82Æ\82µ\82Ä\8dì\90¬\82³\82ê\82½\83t\83H\83\8b\83_\81[\82Í\93K\93\96\82È\96¼\91O\82É\83\8a\83l\81[\83\80\8cã\81A\83\8a\83p\81[\83X\83|\83C\83\93\83g\82Ì\82Ý\82ð\8dí\8f\9c\82µ\82Ü\82·\r
 \r
 \81¡\83A\83\8b\83S\83\8a\83Y\83\80\r
 \83t\83@\83C\83\8b\82ð\8a®\91S\82É\8dí\8f\9c\82µ\82½\82¢\8fê\8d\87\81A\83t\83@\83C\83\8b\82Ì\93à\97e\82ð\93K\93\96\82È\95\8e\9a\82Å\96\84\82ß\82Ä\82µ\82Ü\82¤\82Ì\82ª\88ê\94Ê\93I\82Å\82·\r
@@ -25,4 +27,4 @@ A.2001
 \r
 \81¡\98A\97\8d\90æ\r
 \83T\83|\81[\83g\82â\90V\83o\81[\83W\83\87\83\93\82Ì\83\8a\83\8a\81[\83X\82Í\88È\89º\82Ì\83T\83C\83g\82Å\8ds\82Á\82Ä\82¨\82è\82Ü\82·\r
-http://sourceforge.jp/projects/completeeraser
\ No newline at end of file
+http://sourceforge.jp/projects/completeeraser\r