最近比较懒,写啦挺多好东西,就是没拿出来,今天发一个自己写的ShredFile类

>文件粉碎的流程

  1. 填充文件
  2. 更改最后使用/创建时间
  3. 更改名称
  4. 将大小改为 0 kb
  5. 删除

>具体代码

View Code

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  文件粉碎的方法

随机数
 RandData,
 指定的Byte
 UserByte,
 指定的字符串
 UserString

>>文件粉碎机

>>来看看效果

先创建许多文本文档(1078个每个3kb)

然后粉碎

好了,我们看看能不能恢复

>看来是粉碎了,给个地址,大家下载吧

http://files.cnblogs.com/1119242459blog/FileShredder.rar

转载于:https://www.cnblogs.com/1119242459blog/archive/2012/01/29/2331019.html

如何粉碎文件 - C#相关推荐

  1. C# 系统应用之调用SDelete程序粉碎文件及基础原理知识

    在"个人电脑清除软件"中需要对文件进行彻底粉碎,使其不可恢复.这篇文章主要讲述的是Windows文件系统及调用SDelete程序彻底粉碎文件,希望文章对大家有所帮助. 一.Wind ...

  2. C#强力粉碎文件代码分享,升级中用到

    360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...

  3. 粉碎机无法粉碎文件_粉碎站点地图

    粉碎机无法粉碎文件 作者 克里斯·科耶尔 已发表 2009年1月23日 翻译自: https://css-tricks.com/smashing-sitemap/ 粉碎机无法粉碎文件

  4. Linux 彻底删除、粉碎文件命令shred

    Linux 彻底删除.粉碎文件命令shred shred命令详解 shred命令操作实例 shred命令详解 shred命令相关的命令有:rmdir,rm.用法shred [选项]... 文件...多 ...

  5. C#强烈粉碎文件代码

    360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...

  6. 粉碎机无法粉碎文件_5粉碎敏捷挑战以及如何克服它们

    粉碎机无法粉碎文件 Agile methodology has been developed as a new way to manage projects in teams. It was supp ...

  7. 粉碎机无法粉碎文件_宣布《粉碎杂志》

    粉碎机无法粉碎文件 Life at Smashing Magazine never stops throwing new surprises and challenges my way. When I ...

  8. 腾讯管家强制粉碎文件功能右键添加

    粉碎文件(无需系统权限删文件) 将文件右键菜单的QMSoftExt打开就可以了 点击文件按钮下载后可直接在右键可看到此功能

  9. 删除文件和粉碎文件的区别和作用

    重要机密文档,彻底删除就绝对安全了吗?我们安装某些杀毒软件后,通常会在鼠标右键中出现一个类似"文件粉碎"的选项,它跟我们平常的文件删除有什么区别呢?怎么起到"粉碎&quo ...

最新文章

  1. 谈协同软件实施特点与过程
  2. 如何基于IPFS建一个静态网站
  3. 续说零拷贝(Zero-Copy) - DMA技术
  4. 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc
  5. 队列实现栈的3种方法,全都击败了100%的用户!
  6. 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
  7. 在Outlook中设置类似Foxmail带日期的签名
  8. 博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)
  9. JAVA EE配TOMCAT
  10. c++该转java吗_java多线程,静态方法加锁后,调用该方法会影响其它方法吗?
  11. Visual Studio解决方案的目录结构设置和管理
  12. Android 8.1 SystemUI之状态栏、下拉菜单通知、导航栏分析(一)
  13. python前端和后端_python是用于前端还是后端开发
  14. oracle 用户密码过期修改,Oracle用户登录密码过期的修改
  15. 蓝色音箱改装电源_JBL便携/无线音箱排行榜,JBL便携/无线音箱十大排名推荐
  16. 光量子计算机技术突破,真正突破光刻机封锁的技术诞生了!可编程光量子计算芯片是什么?...
  17. BeyondCompare4破解最佳实践
  18. 基于AM5728 DSP+ARM平台的嵌入式车牌识别
  19. 双频段AP wps同时开启并通过智能手机、windows端连接问题
  20. 树莓派 linux hook,树莓派制造日视/夜视串流直播摄像头

热门文章

  1. 2021-10-06---RestTemplate对象
  2. 如何快速打造强势品牌?
  3. OsChina体系结构
  4. CSP 201712 - 4 【行车路线】
  5. 怎么修改计算机密码界面的背景,怎么修改Win7登录界面背景图片(欢迎界面背景图片)?...
  6. 【智能制造】博创智能注塑生产智能化应用之路
  7. RK CPU调试技巧
  8. 事实胜于雄辩,激素性皮炎的治疗激素皮炎的治疗面部激素性皮炎在康本
  9. python元素分类_在python中对列表的元素进行分类
  10. 树莓派4b: 初级使用(Ubuntu21.10,Windows11写入SSD,远程连接,软路由搭建,webmin安装,自建Dockerhub,远程管理, 百度云盘,阿里云盘同步等)