public static void MessDir(String dirName, MessOption option, bool delAfterMess = false, Logger am = null) { am?.Invoke("<---dir:" + dirName); DirectoryInfo di = new DirectoryInfo(dirName); if (!di.Exists) { Console.WriteLine("dir not found"); return; } foreach (var f in di.GetFileSystemInfos()) { try { if (f is FileInfo) { am?.Invoke("<---" + f.FullName); String name = Mess(f.FullName, option, delAfterMess); am?.Invoke("--->" + name); am?.Invoke("\n"); } else if (f is DirectoryInfo) { MessDir(f.FullName, option, delAfterMess, am); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); continue; } } am?.Invoke("<---dir :" + dirName); }
private void button2_Click(object sender, EventArgs e) { button2.Enabled = false; button1.Enabled = false; MessOption option = radioButton1.Checked ? MessOption.MESS : MessOption.UNMESS; bool isDel = checkBox2.Checked; if (checkBox1.Checked) { String path = textBox1.Text; if (!String.IsNullOrEmpty(path) && Directory.Exists(path)) { try { //new thread new Thread(() => { FileMess.MessDir(path, option, isDel, Log); }) { IsBackground = true }.Start(); } catch (Exception ex) { MessageBox.Show("无法处理的异常:" + ex.Message); } } } else { if (openFileDialog1.FileNames != null && openFileDialog1.FileNames.Length > 0) { try { String[] names = openFileDialog1.FileNames; new Thread(() => { foreach (var name in names) { Log("<---" + name); String newName = FileMess.Mess(name, option, isDel); Log("--->" + newName); } }) { IsBackground = true }.Start(); } catch (Exception ex) { MessageBox.Show("无法处理的异常:" + ex.Message); } } } button1.Enabled = true; textBox1.Text = ""; }
/// <summary> /// 打乱或恢复文件 /// </summary> /// <param name="fullName"></param> /// <param name="ext"></param> /// <returns></returns> public static String Mess(String fullName, MessOption option, bool delAfterMess = false) { String newFullName = null; try { newFullName = ReverseFileWithBinary(fullName, option, delAfterMess); } catch (Exception e) { Console.WriteLine(e.Message); } return(newFullName); }
private static String ReverseFileWithBinary(String src, MessOption option, bool delAfterReverse = false) { FileStream fsReader = null; BinaryReader br = null; FileStream fsWriter = null; BinaryWriter bw = null; String destFileName = null; FileInfo file = new FileInfo(src); if (!file.Exists) { throw new Exception("File Not Found !"); } else if (option != MessOption.MESS && option != MessOption.UNMESS) { throw new Exception("Mess option error!!"); } try { fsReader = new FileStream(src, FileMode.Open); br = new BinaryReader(fsReader, Encoding.UTF8); if (option == MessOption.MESS) { destFileName = String.Format(@"{0}\{1}", file.Directory, Guid.NewGuid().ToString("N")); fsWriter = new FileStream(destFileName, FileMode.CreateNew); bw = new BinaryWriter(fsWriter, Encoding.UTF8); WriteFileHead(bw, file.Name); } else { destFileName = String.Format(@"{0}\{1}", file.Directory, ReadFileHead(br)); fsWriter = new FileStream(destFileName, FileMode.CreateNew); bw = new BinaryWriter(fsWriter, Encoding.UTF8); } byte[] buffer = new byte[buffer_size]; int index = 2; int len = 0; while ((len = br.Read(buffer, 0, index++)) != 0) { Array.Reverse(buffer, 0, len); bw.Write(buffer, 0, len); if (index >= buffer.Length) { index = 2; } } bw.Close(); br.Close(); fsReader.Close(); fsWriter.Close(); if (delAfterReverse) { file.Delete(); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } finally { if (null != bw) { bw.Close(); } if (null != br) { br.Close(); } if (null != fsReader) { fsReader.Close(); } if (null != fsWriter) { fsWriter.Close(); } } return(destFileName); }