编程乐趣: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 });}}}
下载:http://download.csdn.net/detail/yysyangyangyangshan/6860431
相关文章:

大数据工程师手册:全面系统的掌握必备知识与工具
作者 | Phoebe Wong译者 | 陆离编辑 | Jane出品 | AI科技大本营(ID:rgznai100)前言如何才能成为一名真正的“全栈(full-stack)”数据科学家?需要了解哪些知识?掌握哪些技能?概括来讲…

JSON.stringify()
写在前边 不言而喻,JSON.stringify() 是用来将合法的JSON数据字符串化的!然而在正常的工作中我们用到的只是最基础的功能;今天我们就探索不一样的JSON.stringify()。 基础用法 基本数据类型 JSON.stringify(2) // "2" JSON.stringi…

C++中前置声明介绍
前置声明是指对类、函数、模板或者结构体进行声明,仅仅是声明,不包含相关具体的定义。在很多场合我们可以用前置声明来代替#include语句。类的前置声明只是告诉编译器这是一个类型,但无法告知类型的大小,成员等具体内容。在未提供…

在Java SE中使用Hibernate处理数据
如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架。它为开发人员提供了处理企业中的关系数据库的整洁、简明且强大的工具。但如果外部需要访问这些已被包装在J2EE Web应用程序中的实体又该怎么办&#…

利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)
作者 | Jose Garcia译者 | 吴振东校对 | 张一豪、林亦霖,编辑 | 于腾凯来源 | 数据派(ID:datapi)导读:本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲解…
开源软件License汇总
开源软件英文为Open Source Software,简称OSS,又称开放源代码软件,是一种源代码可以任意获取的计算机软件,这种软件的著作权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。 某…

前深度学习时代CTR预估模型的演化之路:从LR到FFM\n
本文是王喆在 AI 前线 开设的原创技术专栏“深度学习 CTR 预估模型实践”的第二篇文章(以下“深度学习 CTR 预估模型实践”简称“深度 CTR 模型”)。专栏第一篇文章回顾:《深度学习CTR预估模型凭什么成为互联网增长的关键?》。重看…

神器与经典--sp_helpIndex
每每和那些NB的人学习技术的时候,往往都佩服他们对各个知识点都熟捻于心,更佩服的是可以在很短时间找出很多业界大师写的文章和开发的工具,就像机器猫的口袋,让人羡慕嫉妒恨啊!宋沄剑宋桑就是其中之一,打劫其硬盘的念头已计划很久,只待时机成…

评分9.7!这本Python书彻底玩大了?程序员:真香!
「超级星推官/每周分享」是一个围绕程序员生活、学习相关的推荐栏目。CSDN出品,每周发布,暂定5期。关键词:靠谱!优质!本期内容,我们将抽1人送出由我司程序员奉为“超级神作”的《疯狂Python讲义》1本&#…

Caffe源码中caffe.proto文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件。在src/caffe/proto目录下有一个caffe.proto文件。proto目录下除了caffe.proto文件外,还有caffe.pb.h和caffe.pb.cc两个文件,此两个文件是根…

这套完美的Java环境安装教程,完整,详细,清晰可观,让你一目了然,简单易懂。⊙﹏⊙...
JDK下载与安装教程 2017年06月18日 22:53:16 Danishlyy1995 阅读数:349980版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012934325/article/details/73441617学习JAVA,必须得安装一下JDK(java dev…

【畅谈百度轻应用】云时代·轻应用·大舞台
云时代轻应用大舞台刘志勇君不见,上下班的地铁上,低头看手机;同事吃饭聊天,低头看手机;甚至朋友聚会,忙里偷闲打个招呼,然后继续低头看手机。正如微博上一个流传甚广的段子:“世界上…

如何画出高级酷炫的神经网络图?优秀程序员都用了这几个工具
(图片付费下载于视觉中国)作者 | 言有三 来源 | 有三AI(ID:yanyousan_ai)【导读】本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。1、NN-SVGNN-SVG 可以非常方便的画出各种类型的…
OpenBLAS简介及在Windows7 VS2013上源码的编译过程
OpenBLAS(Open Basic Linear Algebra Subprograms)是开源的基本线性代数子程序库,是一个优化的高性能多核BLAS库,主要包括矩阵与矩阵、矩阵与向量、向量与向量等操作。它的License是BSD-3-Clause,可以商用,目前最新的发布版本是0.…

技本功丨请带上纸笔刷着看:解读MySQL执行计划的type列和extra列
本萌最近被一则新闻深受鼓舞,西工大硬核“女学神”白雨桐,获6所世界顶级大学博士录取通知书。货真价值的才貌双全,别人家的孩子高考失利与心仪的专业失之交臂,选择了软件工程这门自己完全不懂的专业.即便全部归零,也要…

精美素材分享:16套免费的扁平化图标下载
在这篇文章中你可以看到16套华丽的扁平化图标素材,对于设计师来说非常有价值,能够帮助他们节省大量的时间。这些精美的扁平化图标可用于多种用途,如:GUI 设计,印刷材料,WordPress 主题,演示&…
Caffe源码中math_functions文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下math_functions文件。1. include文件:(1)、<glog/logging.h>:GLog库,它是google的一个开源的日志库,其使用可以参考&…

论文推荐 | 目标检测中不平衡问题算法综述
(图片付费下载于视觉中国)作者 | CV君来源 | 我爱计算机视觉(ID:aicvml)今天跟大家推荐一篇前几天新出的投向TPAMI的论文:Imbalance Problems in Object Detection: A Review,作者详细考察了目标…

php使用redis的GEO地理信息类型
redis3.2中增中了对GEO类型的支持,该类型存储经纬度,提供了经纬设置,查询,范围查询,距离查询,经纬度hash等操作。 <?php$redis new Redis(); $redis->connect(127.0.0.1, 6379, 60); $redis->au…
Caffe源码中syncedmem文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下syncedmem文件。1. include文件:(1)、<caffe/common.hpp>:此文件的介绍可以参考:http://blog.csdn.net/fengbingchun/article/detail…

免费开源!新学期必收藏的AI学习资源,从课件、工具到源码都齐了
(图片付费下载于视觉中国)整理 | Jane出品 | AI科技大本营(ID:rgznai100)2019 年 3 月 28 日,教育部公布了 2018 年度普通高等学校本科专业备案和审批结果,共有 35 所大学新增了独立的人工智能专…

win7利用remote连接服务器,显示发生身份验证错误 要求的函数不受支持
先参考1: https://blog.csdn.net/qq_35880699/article/details/81240010 发现我根本没找到oracle修正的那个文件! 然后我搜索:win7没有oracle修正文件,-------按照参考2中的链接操作,我发现我根本没有CredSSP文件&…

java参数传递:值传递还是引用传递
2019独角兽企业重金招聘Python工程师标准>>> 基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的; 在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数…

干货 | 收藏!16段代码入门Python循环语句
(图片付费下载于视觉中国)作者 | 李明江 张良均 周东平 张尚佳,本文摘编自《Python3智能数据分析快速入门》来源 | 大数据(ID:hzdashuju)【导读】本文将重点讲述for语句和while语句。for语句属于遍历循环&a…

Intel TBB简介及在Windows7 VS2013上源码的编译过程
Intel TBB(Intel Threading Building Blocks)是Intel线程构建块开源库,它的License是Apache 2.0.Intel TBB是一种用于并行编程的基于C语言的框架,它是一套C模板库。它提供了大量特性,具有比线程更高程度的抽象。Intel TBB可以在Windows、Linu…

react中ref的使用
在react中获取真实dom的时候就需要用到ref属性,具体使用如下 var MyComponent React.createClass({handleClick: function() {console.log(this.input)},render: function() {return (<div><input type"text" ref{(input) > {this.input in…
Caffe源码中blob文件分析
Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/blob.hpp文件的内容:1. Include文件:(1)、<caffe/common.hpp>:此文件的介绍可以参考:http://…

jQuery之替换节点
如果要替换节点,jQuery提供了两个方法:replaceWith()和replaceAll()。 两个方法的作用相同,只是操作颠倒了。 作用:将所有匹配的元素都替换成指定的HTML或者DOM元素。(摘自《锋利的jQuery(第二版)》P72) 基…

比特大陆发布第三代AI芯片,INT8算力达17.6Tops
9月17日,福州城市大脑暨闽东北信息化战略合作发布会在数字中国会展中心隆重召开。本次发布会上,比特大陆正式推出了第三代AI芯片BM1684,同时也宣布BM1684将作为底层算力,赋能福州城市大脑,助力数字福州、数字中国的建设…

在 Azure 网站上使用 Memcached 改进 WordPress
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 和 Windows Azure 网站开发人员体验合作伙伴共同撰写。 您是否希望改善在 Azure 网站服务上运行的 WordPress 网站的性能?如果是,那么您就需要一个可帮助加快您…