C#实现彻底删除文件的方法

本文实例讲述了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 });  

           }  

       }  

}

完整实例代码点击此处本站下载

希望本文所述对大家的C#程序设计有所帮助。