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
fs.Close();\r
}\r
\r
- fs = new FileStream(file, FileMode.Open);\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
\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