代码如下:
AbsoluteFile公共类 { 公共事件EventHandler FinishDeleteFileEvent=零; 公共事件EventHandler FinishDeleteFolderEvent=零; 公共事件EventHandler DeleteErrorEvent=零; 公共字符串ErrorString=string.Empty; 公共空间DoAbsoluteDeleteFile filePath(对象) { 试一试 { 字符串文件名=filePath.ToString (); 如果(string.IsNullOrEmpty(文件名) { 返回; } 如果(File.Exists(文件名) { 文件。SetAttributes(文件名,FileAttributes.Normal); 双=数学领域。天花板(新FileInfo(文件名)。长度/512.0); byte [] dummyBuffer=新字节[512]; RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider (); inputStream=new FileStream文件流(文件名,FileMode.Open); inputStream。位置=0; for (int sectorsWritten=0;sectorsWritten & lt;行业;sectorsWritten + +) { rng.GetBytes (dummyBuffer); inputStream。写(dummyBuffer 0 dummyBuffer.Length); sectorsWritten + +; } inputStream.SetLength (0); inputStream.Close (); DateTime dt=new DateTime(2049年1 1 0,0,0); 文件。SetCreationTime(文件名,dt); 文件。SetLastAccessTime(文件名,dt); 文件。SetLastWriteTime(文件名,dt); File.Delete(文件名); WipeDone (); } } 捕获(异常e) { WipeError (e); } } 公共空间DoDeleteFolder(对象文件夹) { 字符串folderPath=folder.ToString (); 如果(string.IsNullOrEmpty (folderPath)) { 返回; } DirectoryInfo直接=new DirectoryInfo (folderPath); FileSystemInfo文件系统[]=direct.GetFileSystemInfos (); 如果文件系统(==null | |文件系统。长度==0) { direct.Delete (); } 其他的 { foreach (FileSystemInfo fileItem在文件系统) { 如果(fileItem FileInfo) { this.DoAbsoluteDeleteFile (fileItem.FullName); } 其他的 { DoDeleteFolder (fileItem.FullName); } } } 如果这一点。FinishDeleteFolderEvent !=null) { 这一点。FinishDeleteFolderEvent(空); } } 私人空间WipeError(异常e) { 如果(DeleteErrorEvent !=null) { ErrorString=e.Message; DeleteErrorEvent(空); } } 私人空间WipeDone () { 如果(FinishDeleteFileEvent !=null) { FinishDeleteFileEvent(空); } } }
公共部分中类Form1:形式 { 私人线程dfileThread=零; 私人字符串fileObjectPath=string.Empty; 私人bool isFile=true; 公众委托无效DefaulEventDelegate(对象发送方,EventArgs e); 公共Form1 () { InitializeComponent (); } 私人空间btnSelectFile_Click(对象发送方,EventArgs e) { isFile=true; 这一点。openFileDialog1=new OpenFileDialog (); openFileDialog1。多?true; openFileDialog1。Title=扒胙≡裎募? openFileDialog1。过滤器="所有文件(* . *)| * . *”; 如果(openFileDialog1.ShowDialog ()==DialogResult.OK) { this.txtFilePath。文本=openFileDialog1.FileName; } fileObjectPath=this.txtFilePath.Text.Trim (); } 私人空间btnSelectFolder_Click(对象发送方,EventArgs e) { isFile=false; 这一点。folderBrowserDialog1=new FolderBrowserDialog (); folderBrowserDialog1。描述="请选择文件路径”; 如果(folderBrowserDialog1.ShowDialog ()==DialogResult.OK) { this.txtFolder。文本=folderBrowserDialog1.SelectedPath; } fileObjectPath=this.txtFolder.Text.Trim (); } 私人空间btnAbsoluteDelete_Click(对象发送方,EventArgs e) { this.lblHint。可见=true; 如果(string.IsNullOrEmpty (fileObjectPath)) { MessageBox.Show(“请选择要粉碎的文件和文件夹!”); 返回; } AbsoluteFile dfile=new AbsoluteFile (); dfile。DeleteErrorEvent +=new EventHandler (Dfile_DeleteErrorEvent); 如果(isFile) { dfile。FinishDeleteFileEvent +=new EventHandler (Dfile_FinishDeleteFileEvent); dfileThread=新线程(新ParameterizedThreadStart (dfile.DoAbsoluteDeleteFile)); dfileThread。IsBackground=true; dfileThread.Start (fileObjectPath); } 其他的 { dfile。FinishDeleteFolderEvent +=new EventHandler (Dfile_FinishDeleteFolderEvent); dfileThread=新线程(新ParameterizedThreadStart (dfile.DoDeleteFolder)); dfileThread。IsBackground=true; dfileThread.Start (fileObjectPath); } this.lblHint。文本=@”正在删除……”; } 空白Dfile_DeleteErrorEvent(对象发送方,EventArgs e) { 如果(! this.InvokeRequired) { 对话框。表演(AbsoluteFile(发送方).ErrorString); } 其他的 { 这一点。BeginInvoke(新DefaulEventDelegate (Dfile_DeleteErrorEvent),新对象[]{发送方,e}); } } 空白Dfile_FinishDeleteFolderEvent(对象发送方,EventArgs e) { 如果(! this.InvokeRequired) { this.lblHint。可见=false; MessageBox.Show(“删除完毕!”); } 其他的 { 这一点。BeginInvoke(新DefaulEventDelegate (Dfile_FinishDeleteFolderEvent),新对象[]{发送方,e}); } } 空白Dfile_FinishDeleteFileEvent(对象发送方,EventArgs e) { 如果(! this.InvokeRequired) { this.lblHint。可见=false; MessageBox.Show(“删除完毕!”); } 其他的 { 这一点。BeginInvoke(新DefaulEventDelegate (Dfile_FinishDeleteFileEvent),新对象[]{发送方,e}); } } }