1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 编程乐趣:C#彻底删除文件

编程乐趣:C#彻底删除文件

时间:2020-12-25 14:43:26

相关推荐

编程乐趣:C#彻底删除文件

经常用360的文件粉碎,删除隐私文件貌似还不错的。不过C#也可以实现彻底删除文件。试了下用360文件恢复恢复不了源文件了。

代码如下:

public class AbsoluteFile{public event EventHandler FinishDeleteFileEvent = null;public event EventHandler FinishDeleteFolderEvent = null;public event EventHandler DeleteErrorEvent = null;public string ErrorString = string.Empty;public void DoAbsoluteDeleteFile(object filePath){try{string filename = filePath.ToString();if (string.IsNullOrEmpty(filename)){return;}if (File.Exists(filename)){File.SetAttributes(filename, FileAttributes.Normal);double sectors = Math.Ceiling(new FileInfo(filename).Length / 512.0);byte[] dummyBuffer = new byte[512];RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();FileStream inputStream = new FileStream(filename, FileMode.Open);inputStream.Position = 0;for (int sectorsWritten = 0; sectorsWritten < sectors; sectorsWritten++){rng.GetBytes(dummyBuffer);inputStream.Write(dummyBuffer, 0, dummyBuffer.Length);sectorsWritten++;}inputStream.SetLength(0);inputStream.Close();DateTime dt = new DateTime(2049, 1, 1, 0, 0, 0);File.SetCreationTime(filename, dt);File.SetLastAccessTime(filename, dt);File.SetLastWriteTime(filename, dt);File.Delete(filename);WipeDone();}}catch (Exception e){WipeError(e);}}public void DoDeleteFolder(object folder){string folderPath = folder.ToString();if (string.IsNullOrEmpty(folderPath)){return;}DirectoryInfo direct = new DirectoryInfo(folderPath);FileSystemInfo[] filesystem = direct.GetFileSystemInfos();if (filesystem == null || filesystem.Length == 0){direct.Delete();}else{foreach (FileSystemInfo fileItem in filesystem){if (fileItem is FileInfo){this.DoAbsoluteDeleteFile(fileItem.FullName);}else{DoDeleteFolder(fileItem.FullName);}}}if (this.FinishDeleteFolderEvent != null){this.FinishDeleteFolderEvent(this, null);}}private void WipeError(Exception e){if (DeleteErrorEvent != null){ErrorString = e.Message;DeleteErrorEvent(this, null);}}private void WipeDone(){if (FinishDeleteFileEvent != null){FinishDeleteFileEvent(this, null);}}}

顺便写了个简单的界面:

后台:

public partial class Form1 : Form{private Thread dfileThread = null;private string fileObjectPath = string.Empty;private bool isFile = true;public delegate void DefaulEventDelegate(object sender, EventArgs e);public Form1(){InitializeComponent();}private void btnSelectFile_Click(object sender, EventArgs e){isFile = true;this.openFileDialog1 = new OpenFileDialog();openFileDialog1.Multiselect = true;openFileDialog1.Title = "请选择文件";openFileDialog1.Filter = "所有文件(*.*)|*.*";if (openFileDialog1.ShowDialog() == DialogResult.OK){this.txtFilePath.Text = openFileDialog1.FileName;}fileObjectPath = this.txtFilePath.Text.Trim();}private void btnSelectFolder_Click(object sender, EventArgs e){isFile = false;this.folderBrowserDialog1 = new FolderBrowserDialog();folderBrowserDialog1.Description = "请选择文件路径";if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){this.txtFolder.Text = folderBrowserDialog1.SelectedPath;}fileObjectPath = this.txtFolder.Text.Trim();}private void btnAbsoluteDelete_Click(object sender, EventArgs e){this.lblHint.Visible = true;if(string.IsNullOrEmpty(fileObjectPath)){MessageBox.Show("请选择要粉碎的文件和文件夹!");return;}AbsoluteFile dfile = new AbsoluteFile();dfile.DeleteErrorEvent += new EventHandler(Dfile_DeleteErrorEvent);if (isFile){dfile.FinishDeleteFileEvent += new EventHandler(Dfile_FinishDeleteFileEvent);dfileThread = new Thread(new ParameterizedThreadStart(dfile.DoAbsoluteDeleteFile));dfileThread.IsBackground = true;dfileThread.Start(fileObjectPath);}else{dfile.FinishDeleteFolderEvent += new EventHandler(Dfile_FinishDeleteFolderEvent);dfileThread = new Thread(new ParameterizedThreadStart(dfile.DoDeleteFolder));dfileThread.IsBackground = true;dfileThread.Start(fileObjectPath);}this.lblHint.Text = @"正在删除...";}void Dfile_DeleteErrorEvent(object sender, EventArgs e){if (!this.InvokeRequired){MessageBox.Show((sender as AbsoluteFile).ErrorString);}else{this.BeginInvoke(new DefaulEventDelegate(Dfile_DeleteErrorEvent), new object[] { sender, e });}}void Dfile_FinishDeleteFolderEvent(object sender, EventArgs e){if (!this.InvokeRequired){this.lblHint.Visible = false;MessageBox.Show("删除完毕!");}else{this.BeginInvoke(new DefaulEventDelegate(Dfile_FinishDeleteFolderEvent),new object[] { sender,e });}}void Dfile_FinishDeleteFileEvent(object sender, EventArgs e){if (!this.InvokeRequired){this.lblHint.Visible = false;MessageBox.Show("删除完毕!");}else{this.BeginInvoke(new DefaulEventDelegate(Dfile_FinishDeleteFileEvent), new object[] { sender, e });}}}

下载:/detail/yysyangyangyangshan/6860431

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。