如何粉碎文件 - C#
最近比较懒,写啦挺多好东西,就是没拿出来,今天发一个自己写的ShredFile类
>文件粉碎的流程
- 填充文件
- 更改最后使用/创建时间
- 更改名称
- 将大小改为 0 kb
- 删除
>具体代码
using System;using System.Collections.Generic;using System.Text;using System.IO; namespace RocketStudio{class ShredFile {/// <summary>/// 文件粉碎选项/// </summary> public enum ShredMode {/// <summary>/// 随机数/// </summary> RandData,/// <summary>/// 指定的Byte/// </summary> UserByte,/// <summary>/// 指定的字符串/// </summary> UserString }/// <summary>/// 将指定的流粉碎使用随机数/// </summary>/// <param name="fs">文件流</param>/// <returns></returns> public bool Shred(FileStream fs) {try { BinaryWriter bw = new BinaryWriter(fs);long fileLength = fs.Length;long writeBytes = 0; Random random = new Random();byte[] data = new byte[10240]; random.NextBytes(data); for (; writeBytes < fileLength; writeBytes += 10240) {if (fileLength - writeBytes > 10240) bw.Write(data);else bw.Write(data, 0, (int)(fileLength - writeBytes)); } fs.Flush();return true; }catch {return false; } }/// <summary>/// 将指定的流粉碎使用指定字符/// </summary>/// <param name="fs">文件流</param>/// <param name="data">字符串</param>/// <returns></returns> public bool Shred(FileStream fs, byte data) {try { BinaryWriter bw = new BinaryWriter(fs);long fileLength = fs.Length;long writeBytes = 0;for (; writeBytes < fileLength; writeBytes++) { bw.Write(data); } fs.Flush();return true; }catch {return false; } }/// <summary>/// 将指定的流粉碎使用指定字符串/// </summary>/// <param name="fs">文件流</param>/// <param name="data">字符串</param>/// <returns></returns> public bool Shred(FileStream fs, string data) {try { BinaryWriter bw = new BinaryWriter(fs);long fileLength = fs.Length;long writeBytes = 0;char[] dataArry = new char[data.Length];for (int ii = 0;ii<data.Length;ii++) { dataArry[ii] = data[ii]; }int dataLength = dataArry.Length;for (; writeBytes < fileLength; writeBytes += dataLength) {if ((fileLength - writeBytes) < dataLength) bw.Write(dataArry);else bw.Write(dataArry, 0, dataLength); } fs.Flush();return true; }catch {return false; } }public void RenameFile(string old, string last) { File.Move(old, last); }/// <summary>/// 使用随机数生成文件名/// </summary>/// <returns></returns> private string ReandName() { Random random = new Random(); random.Next(1000).ToString();return random.Next(1000).ToString() + random.Next(1000).ToString() + random.Next(1000).ToString(); }/// <summary>/// 开始粉碎/// </summary>/// <param name="fileName">文件名</param>/// <param name="data">填充数据,ShredMode.RandData 将忽略 可为NULL</param>/// <param name="sm">粉碎文件模式</param>/// <returns>是否成功</returns> public bool StartShredFile(string fileName, object data, ShredMode sm, bool IsCleanCreatedDate, bool IsCleanLastUsedDate, bool IsCleanName, bool IsEmptyFile) { FileStream fs = null;try { fs = File.Open(fileName, FileMode.Open); }catch {//error return false; }bool IsSucceed = false;switch (sm) {case ShredMode.RandData: IsSucceed = Shred(fs);break;case ShredMode.UserByte: IsSucceed = Shred(fs, Convert.ToByte(data));break;case ShredMode.UserString: IsSucceed = Shred(fs, (string)data);break; } DateTime dt = new DateTime(2012,12,24);try { FileInfo fi = new FileInfo(fileName);string randName;if (IsCleanName) randName = ReandName();else randName = @"\"+fi.Name; fs.Close();if(IsEmptyFile) File.Open(fi.FullName, FileMode.Truncate).Close();if(IsCleanName) RenameFile(fi.FullName, fi.DirectoryName + randName);if(IsCleanCreatedDate) File.SetCreationTime(fi.DirectoryName + randName, dt);if (IsCleanLastUsedDate) {if(IsCleanName) File.SetLastWriteTime(fi.DirectoryName + randName, dt);else File.SetLastWriteTime(fi.FullName, dt); } File.Delete(fi.DirectoryName + randName); } catch {return false; }finally { fs.Close(); }return IsSucceed; } } }
>如何使用
bool StartShredFile(string fileName, object data, ShredMode sm, bool IsCleanCreatedDate, bool IsCleanLastUsedDate, bool IsCleanName, bool IsEmptyFile) |
>>>使用指定方法粉碎文件并删除 string filename : 文件名 ShredMode sm : 粉碎的方法(填充数据的类型)(RandData随机数, UserByte指定的字节, UserString指定的字符串) Object data : 填充的数据(根据ShredMode指定的方法拆箱)可以为string,byte,在ShredMode为RandData时可以为null bool IsCleanCreatedDate : 是否更改创建日期(指定为2012,12,24) bool IsCleanLastUsedDate : 是否更改最后使用日期(同上) 返回是否成功 |
bool Shred(FileStream fs) |
内部方法>>>填充文件(没来得及换名字,也算粉碎吧) 重载 0 将FileStream fs指定的文件填充为随机数 返回是否成功 |
bool Shred(FileStream fs, byte data) |
内部方法>>>填充文件(没来得及换名字,也算粉碎吧) 重载 1 将FileStream fs指定的文件填充为byte data 的数据 返回是否成功 |
bool Shred(FileStream fs, string data) |
内部方法>>>填充文件(没来得及换名字,也算粉碎吧) 重载 2 将FileStream fs指定的文件填充为string data 的数据 返回是否成功 |
枚举 enum ShredMode |
文件粉碎的方法
随机数 |
>>文件粉碎机
>>来看看效果
先创建许多文本文档(1078个每个3kb)
然后粉碎
好了,我们看看能不能恢复
>看来是粉碎了,给个地址,大家下载吧
http://files.cnblogs.com/1119242459blog/FileShredder.rar
转载于:https://www.cnblogs.com/1119242459blog/archive/2012/01/29/2331019.html
如何粉碎文件 - C#相关推荐
- C# 系统应用之调用SDelete程序粉碎文件及基础原理知识
在"个人电脑清除软件"中需要对文件进行彻底粉碎,使其不可恢复.这篇文章主要讲述的是Windows文件系统及调用SDelete程序彻底粉碎文件,希望文章对大家有所帮助. 一.Wind ...
- C#强力粉碎文件代码分享,升级中用到
360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...
- 粉碎机无法粉碎文件_粉碎站点地图
粉碎机无法粉碎文件 作者 克里斯·科耶尔 已发表 2009年1月23日 翻译自: https://css-tricks.com/smashing-sitemap/ 粉碎机无法粉碎文件
- Linux 彻底删除、粉碎文件命令shred
Linux 彻底删除.粉碎文件命令shred shred命令详解 shred命令操作实例 shred命令详解 shred命令相关的命令有:rmdir,rm.用法shred [选项]... 文件...多 ...
- C#强烈粉碎文件代码
360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...
- 粉碎机无法粉碎文件_5粉碎敏捷挑战以及如何克服它们
粉碎机无法粉碎文件 Agile methodology has been developed as a new way to manage projects in teams. It was supp ...
- 粉碎机无法粉碎文件_宣布《粉碎杂志》
粉碎机无法粉碎文件 Life at Smashing Magazine never stops throwing new surprises and challenges my way. When I ...
- 腾讯管家强制粉碎文件功能右键添加
粉碎文件(无需系统权限删文件) 将文件右键菜单的QMSoftExt打开就可以了 点击文件按钮下载后可直接在右键可看到此功能
- 删除文件和粉碎文件的区别和作用
重要机密文档,彻底删除就绝对安全了吗?我们安装某些杀毒软件后,通常会在鼠标右键中出现一个类似"文件粉碎"的选项,它跟我们平常的文件删除有什么区别呢?怎么起到"粉碎&quo ...
最新文章
- 谈协同软件实施特点与过程
- 如何基于IPFS建一个静态网站
- 续说零拷贝(Zero-Copy) - DMA技术
- 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc
- 队列实现栈的3种方法,全都击败了100%的用户!
- 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
- 在Outlook中设置类似Foxmail带日期的签名
- 博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)
- JAVA EE配TOMCAT
- c++该转java吗_java多线程,静态方法加锁后,调用该方法会影响其它方法吗?
- Visual Studio解决方案的目录结构设置和管理
- Android 8.1 SystemUI之状态栏、下拉菜单通知、导航栏分析(一)
- python前端和后端_python是用于前端还是后端开发
- oracle 用户密码过期修改,Oracle用户登录密码过期的修改
- 蓝色音箱改装电源_JBL便携/无线音箱排行榜,JBL便携/无线音箱十大排名推荐
- 光量子计算机技术突破,真正突破光刻机封锁的技术诞生了!可编程光量子计算芯片是什么?...
- BeyondCompare4破解最佳实践
- 基于AM5728 DSP+ARM平台的嵌入式车牌识别
- 双频段AP wps同时开启并通过智能手机、windows端连接问题
- 树莓派 linux hook,树莓派制造日视/夜视串流直播摄像头
热门文章
- 2021-10-06---RestTemplate对象
- 如何快速打造强势品牌?
- OsChina体系结构
- CSP 201712 - 4 【行车路线】
- 怎么修改计算机密码界面的背景,怎么修改Win7登录界面背景图片(欢迎界面背景图片)?...
- 【智能制造】博创智能注塑生产智能化应用之路
- RK CPU调试技巧
- 事实胜于雄辩,激素性皮炎的治疗激素皮炎的治疗面部激素性皮炎在康本
- python元素分类_在python中对列表的元素进行分类
- 树莓派4b: 初级使用(Ubuntu21.10,Windows11写入SSD,远程连接,软路由搭建,webmin安装,自建Dockerhub,远程管理, 百度云盘,阿里云盘同步等)