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});
}
}
}
|
|