配色: 字号:
C#实现彻底删除文件的方法
2016-12-28 | 阅:  转:  |  分享 
  
C#实现彻底删除文件的方法

这篇文章主要介绍了C#实现彻底删除文件的方法,可实现类似360粉碎文件的效果,是非常实用的技巧,需要的朋友可以参考下

本文实例讲述了C#实现彻底删除文件的方法。分享给大家供大家参考。具体实现方法如下:



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



主要代码如下:





复制代码代码如下:



publicclassAbsoluteFile

{

publiceventEventHandlerFinishDeleteFileEvent=null;

publiceventEventHandlerFinishDeleteFolderEvent=null;

publiceventEventHandlerDeleteErrorEvent=null;

publicstringErrorString=string.Empty;

publicvoidDoAbsoluteDeleteFile(objectfilePath)

{

try

{

stringfilename=filePath.ToString();

if(string.IsNullOrEmpty(filename))

{

return;

}

if(File.Exists(filename))

{

File.SetAttributes(filename,FileAttributes.Normal);

doublesectors=Math.Ceiling(newFileInfo(filename).Length/512.0);

byte[]dummyBuffer=newbyte[512];

RNGCryptoServiceProviderrng=newRNGCryptoServiceProvider();

FileStreaminputStream=newFileStream(filename,FileMode.Open);

inputStream.Position=0;

for(intsectorsWritten=0;sectorsWritten
{

rng.GetBytes(dummyBuffer);

inputStream.Write(dummyBuffer,0,dummyBuffer.Length);

sectorsWritten++;

}

inputStream.SetLength(0);

inputStream.Close();

DateTimedt=newDateTime(2049,1,1,0,0,0);

File.SetCreationTime(filename,dt);

File.SetLastAccessTime(filename,dt);

File.SetLastWriteTime(filename,dt);

File.Delete(filename);

WipeDone();

}

}

catch(Exceptione)

{

WipeError(e);

}

}

publicvoidDoDeleteFolder(objectfolder)

{

stringfolderPath=folder.ToString();

if(string.IsNullOrEmpty(folderPath))

{

return;

}

DirectoryInfodirect=newDirectoryInfo(folderPath);

FileSystemInfo[]filesystem=direct.GetFileSystemInfos();

if(filesystem==null||filesystem.Length==0)

{

direct.Delete();

}

else

{

foreach(FileSystemInfofileIteminfilesystem)

{

if(fileItemisFileInfo)

{

this.DoAbsoluteDeleteFile(fileItem.FullName);

}

else

{

DoDeleteFolder(fileItem.FullName);

}

}

}

if(this.FinishDeleteFolderEvent!=null)

{

this.FinishDeleteFolderEvent(this,null);

}

}

privatevoidWipeError(Exceptione)

{

if(DeleteErrorEvent!=null)

{

ErrorString=e.Message;

DeleteErrorEvent(this,null);

}

}

privatevoidWipeDone(www.hunanwang.net)

{

if(FinishDeleteFileEvent!=null)

{

FinishDeleteFileEvent(this,null);

}

}

}



顺便写了个简单的界面:







后台代码如下所示:





复制代码代码如下:



publicpartialclassForm1:Form

{

privateThreaddfileThread=null;

privatestringfileObjectPath=string.Empty;

privateboolisFile=true;

publicdelegatevoidDefaulEventDelegate(objectsender,EventArgse);

publicForm1()

{

InitializeComponent();

}

privatevoidbtnSelectFile_Click(objectsender,EventArgse)

{

isFile=true;

this.openFileDialog1=newOpenFileDialog();

openFileDialog1.Multiselect=true;

openFileDialog1.Title="请选择文件";

openFileDialog1.Filter="所有文件(.)|.";

if(openFileDialog1.ShowDialog()==DialogResult.OK)

{

this.txtFilePath.Text=openFileDialog1.FileName;

}

fileObjectPath=this.txtFilePath.Text.Trim();

}

privatevoidbtnSelectFolder_Click(objectsender,EventArgse)

{

isFile=false;

this.folderBrowserDialog1=newFolderBrowserDialog();

folderBrowserDialog1.Description="请选择文件路径";

if(folderBrowserDialog1.ShowDialog()==DialogResult.OK)

{

this.txtFolder.Text=folderBrowserDialog1.SelectedPath;

}

fileObjectPath=this.txtFolder.Text.Trim(www.visa158.com);

}

privatevoidbtnAbsoluteDelete_Click(objectsender,EventArgse)

{

this.lblHint.Visible=true;

if(string.IsNullOrEmpty(fileObjectPath))

{

MessageBox.Show("请选择要粉碎的文件和文件夹!");

return;

}

AbsoluteFiledfile=newAbsoluteFile();

dfile.DeleteErrorEvent+=newEventHandler(Dfile_DeleteErrorEvent);

if(isFile)

{

dfile.FinishDeleteFileEvent+=newEventHandler(Dfile_FinishDeleteFileEvent);

dfileThread=newThread(newParameterizedThreadStart(dfile.DoAbsoluteDeleteFile));

dfileThread.IsBackground=true;

dfileThread.Start(fileObjectPath);

}

else

{

dfile.FinishDeleteFolderEvent+=newEventHandler(Dfile_FinishDeleteFolderEvent);

dfileThread=newThread(newParameterizedThreadStart(dfile.DoDeleteFolder));

dfileThread.IsBackground=true;

dfileThread.Start(fileObjectPath);

}

this.lblHint.Text=@"正在删除...";

}

voidDfile_DeleteErrorEvent(objectsender,EventArgse)

{

if(!this.InvokeRequired)

{

MessageBox.Show((senderasAbsoluteFile).ErrorString);

}

else

{

this.BeginInvoke(newDefaulEventDelegate(Dfile_DeleteErrorEvent),newobject[]{sender,e});

}

}

voidDfile_FinishDeleteFolderEvent(objectsender,EventArgse)

{

if(!this.InvokeRequired)

{

this.lblHint.Visible=false;

MessageBox.Show("删除完毕!");

}

else

{

this.BeginInvoke(newDefaulEventDelegate(Dfile_FinishDeleteFolderEvent),newobject[]{sender,e});

}

}

voidDfile_FinishDeleteFileEvent(objectsender,EventArgse)

{

if(!this.InvokeRequired)

{

this.lblHint.Visible=false;

MessageBox.Show("删除完毕!");

}

else

{

this.BeginInvoke(newDefaulEventDelegate(Dfile_FinishDeleteFileEvent),newobject[]{sender,e});

}

}

}





















献花(0)
+1
(本文系白狐一梦首藏)