编程乐趣:C#彻底删除文件-创新互联
经常用360的文件粉碎,删除隐私文件貌似还不错的。不过C#也可以实现彻底删除文件。试了下用360文件恢复恢复不了源文件了。
创新互联建站主营平房网站建设的网络公司,主营网站建设方案,手机APP定制开发,平房h5微信平台小程序开发搭建,平房网站营销推广欢迎平房等地区企业咨询代码如下:
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 }); } } }
下载:http://download.csdn.net/detail/yysyangyangyangshan/6860431
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:编程乐趣:C#彻底删除文件-创新互联
当前路径:http://scyanting.com/article/cdogih.html