>文件粉碎的流程

  1. 填充文件
  2. 更改最后使用/创建时间
  3. 更改名称
  4. 将大小改为 0 kb
  5. 删除
 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 = ;
Random random = new Random();
byte[] data = new byte[];
random.NextBytes(data); for (; writeBytes < fileLength; writeBytes += )
{
if (fileLength - writeBytes > )
bw.Write(data);
else bw.Write(data, , (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 = ;
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 = ;
char[] dataArry = new char[data.Length];
for (int ii = ;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, , 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().ToString();
return random.Next().ToString() + random.Next().ToString() + random.Next().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(,,);
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

引用:http://www.cnblogs.com/1119242459blog/archive/2012/01/29/2331019.html

C# 文件粉碎的更多相关文章

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

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

  2. 轻松解决U盘中病毒,文件变成.exe执行文件的问题

    U盘中的文件都变成.exe可执行文件是怎么回事?告诉你,你的U盘中病毒了,那么如何清除呢?小编现在就告诉你几个简单方法,轻松就能搞定U盘中病毒问题. 方法1: (1)首先使用杀毒软件把U盘杀杀毒,除去 ...

  3. U盘文件后缀变成.exe怎么办?

    现在U盘病毒90%都是kido病毒,中了kido病毒的U盘文件名会变成可执行文件,后缀带有exe,虽然杀毒软件可以杀掉,但都是没办法处理它的母体,由于此类文件并没有丢失,而是被隐藏了,因此我们可以靠手 ...

  4. Windows环境下文件的彻底删除与恢复,推荐几个工具(整理)

    1. 背景 在Windows(从XP到Win7)中删除文件时,无论是Delete或者是Shift+Delete,都不能真正的删除文件,它做的事情只是从文件分配表中删除了该文件的信息,而并未将文件从存储 ...

  5. Win7系统下删除文件时出现“正在准备再循环”的解决方法

    今天,笔者在备份文件的时候,将一个word文档从移动硬盘复制到桌面.经过一系列“复(meng)杂(bi)”的操作之后,笔者突然发现,文件无法删除了.当右键文件点击“删除”时,出现对话框显示“正在准备 ...

  6. window 删除文件提示指定的文件名无效或太长

    方法0: 使用 chkdsk 磁盘修复工具 .单击“开始”,点击“运行”,输入cmd并回车打开命令提示符窗口: .在此窗口输入以下命令: 例如:检查并修复D分区 chkdsk D: /f 回车,输入 ...

  7. Linux基础教程 linux系统中的批量删除文件与空文件删除的命令介绍

    linux下面删除文件或者目录命令rm(remove): 兄弟连Linux培训 功能说明:删除文件或目录. 语 法:rm[-dfirv][--help][--version][文件或目录...] 补充 ...

  8. 两年的坚持,最后还是决定将ISoft开源

    还记得2011年9月份,我在上大四,本来想着考研能上个好点的学校,可我怎么就不愿去自习室上自习.每天晚上睡觉前都告诉自己明天早晨一定早起去上自习,但又每次醒来都不想起床啊,懒,没办法.睡到不想再睡了才 ...

  9. 【技术贴】删除360快捷搜索 ctrl+ctrl

    恶心的功能,这么变态!如何删除360快捷键ctrl,桌面跳出360搜索怎么办?360 ctrl 删除 卸载方法: 桌面右下角,在360图标上右键点击设置,进入设置中心. 把 [开启快捷搜索功能,双击C ...

随机推荐

  1. 【转】Android中设置TextView的颜色setTextColor--代码中设置字体颜色

    原文网址:http://www.cnblogs.com/myphoebe/archive/2012/01/06/2314728.html android中设置TextView的颜色有方法setText ...

  2. Makefile自动生成头文件依赖

    前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖 ...

  3. 路徑 z

    最近因為寫到使用FileDialog開檔讀檔的關係,所以在打開時,會常常需要移動到資料夾所在路徑,因此就在想要如何才能指定開啟FileDialog 能夠就指定在想要的資料夾上,並且移動整個專案時,不會 ...

  4. 基于Noootes/Dooomino的文档工作流系统(转)

    (流程样例应用程序终于整理上传好可供下载了http://download.csdn.net/download/starrow/8422299) 上文分析了我们的流程配置使用三类对象,分别对应三类文档: ...

  5. Unity3d shader之SWAP Force Depth-of-Field Shader

    由于博主常年逃课,所以期末考试期间只能突击,但偶尔还能拿个奖学金啥的,哈哈,所以近一个月没有做游戏,也没有发博客= =... 这个景深的方法很简单 我们需要求的是CoC(circle of confu ...

  6. 【leetcode】编辑距离

    dp方程“ 1.初始化:dp[0][i]=i; dp[j][0]=j; 2.dp[i][j]=         dp[i-1][j-1](相等) dp[i-1][j]+1 ,,dp[i][j-1]+1 ...

  7. codeforces Codeforces 650A Watchmen

    题意:两点(x1,y1), (x2,y2)的曼哈顿距离=欧几里得距离 也就是:x1=x2或y1=y2,再删除重合点造成的重复计数即可. #include <stdio.h> #includ ...

  8. First Adventures in Google Closure -摘自网络

    Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...

  9. 【转】Flask安装

    Flask 依赖两个外部库:Werkzeug 和 Jinja2 . Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集.Jinja2 负责渲染模板 ...

  10. Hibernate查询之Example查询

    org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询. 此实例的属性值将做成查询条件. Cat cat = new Cat(); cat.setSe ...