C# 文件粉碎
>文件粉碎的流程
- 填充文件
- 更改最后使用/创建时间
- 更改名称
- 将大小改为 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 = ;
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 | 文件粉碎的方法
随机数 |
引用:http://www.cnblogs.com/1119242459blog/archive/2012/01/29/2331019.html
C# 文件粉碎的更多相关文章
- C#强力粉碎文件代码分享,升级中用到
360的文件粉碎机还是很强大的,在我们客户端winform升级的时候,必须将有些文件进行强力删除后下载更新,如果删除失败很有可能整个 程序就无法更新到最新的版本,所以这里参考了网上的资料整理了一个文件 ...
- 轻松解决U盘中病毒,文件变成.exe执行文件的问题
U盘中的文件都变成.exe可执行文件是怎么回事?告诉你,你的U盘中病毒了,那么如何清除呢?小编现在就告诉你几个简单方法,轻松就能搞定U盘中病毒问题. 方法1: (1)首先使用杀毒软件把U盘杀杀毒,除去 ...
- U盘文件后缀变成.exe怎么办?
现在U盘病毒90%都是kido病毒,中了kido病毒的U盘文件名会变成可执行文件,后缀带有exe,虽然杀毒软件可以杀掉,但都是没办法处理它的母体,由于此类文件并没有丢失,而是被隐藏了,因此我们可以靠手 ...
- Windows环境下文件的彻底删除与恢复,推荐几个工具(整理)
1. 背景 在Windows(从XP到Win7)中删除文件时,无论是Delete或者是Shift+Delete,都不能真正的删除文件,它做的事情只是从文件分配表中删除了该文件的信息,而并未将文件从存储 ...
- Win7系统下删除文件时出现“正在准备再循环”的解决方法
今天,笔者在备份文件的时候,将一个word文档从移动硬盘复制到桌面.经过一系列“复(meng)杂(bi)”的操作之后,笔者突然发现,文件无法删除了.当右键文件点击“删除”时,出现对话框显示“正在准备 ...
- window 删除文件提示指定的文件名无效或太长
方法0: 使用 chkdsk 磁盘修复工具 .单击“开始”,点击“运行”,输入cmd并回车打开命令提示符窗口: .在此窗口输入以下命令: 例如:检查并修复D分区 chkdsk D: /f 回车,输入 ...
- Linux基础教程 linux系统中的批量删除文件与空文件删除的命令介绍
linux下面删除文件或者目录命令rm(remove): 兄弟连Linux培训 功能说明:删除文件或目录. 语 法:rm[-dfirv][--help][--version][文件或目录...] 补充 ...
- 两年的坚持,最后还是决定将ISoft开源
还记得2011年9月份,我在上大四,本来想着考研能上个好点的学校,可我怎么就不愿去自习室上自习.每天晚上睡觉前都告诉自己明天早晨一定早起去上自习,但又每次醒来都不想起床啊,懒,没办法.睡到不想再睡了才 ...
- 【技术贴】删除360快捷搜索 ctrl+ctrl
恶心的功能,这么变态!如何删除360快捷键ctrl,桌面跳出360搜索怎么办?360 ctrl 删除 卸载方法: 桌面右下角,在360图标上右键点击设置,进入设置中心. 把 [开启快捷搜索功能,双击C ...
随机推荐
- What exactly is the difference between WndProc and DefaultWndProc?
Control.DefWndProc Sends the specified message to the default window procedure. 参数说明:m:The Windows M ...
- linux 下 select 编程
linux 下的 select 知识点 unp 的第六章已经描述的很清楚,我们这里简单的说下 select 的作用,并给出 select 的客户端实例.我们知道 select 是IO 多路复用的一个最 ...
- CentOS下date命令 - 显示和设置系统日期与时间
显示系统日期 要显示系统日期,只要输入: $ date Thu Dec 5 22:55:41 WIB 2013 格式化显示日期 日期有很多格式.如果你不喜欢默认的格式,你可以换一种格式.你可能会想&q ...
- 【转】win7 虚拟机virtualbox中ubuntu12.04安装samba实现文件共享
原文网址:http://blog.csdn.net/watkinsong/article/details/8878786 昨天心血来潮,又装了个虚拟机,然后安装了ubuntu12.04,为了实现在虚拟 ...
- Eclipse超级完美汉化教程
转自:http://jingyan.baidu.com/article/e75057f28401a8ebc91a899e.html 是中国人都喜欢汉化的东西,除非你想挑战英文,抑或你就是英语高手.百度 ...
- HDU-2547 无剑无我
无剑无我 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- ASCII,Unicode和UTF-8字符编码
ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...
- CentOS环境下yum安装LAMP(Linux+Apache+Mysql+php)
CentOS下使用yum命令 安装LAMP详细过程.我们使用的软件是CentOS的最新版本CentOS 6.3,其他版本的也基本类似. 第一步:更新系统内核(如果不想更新可以跳过本步). 首先更新系统 ...
- 佛山Uber优步司机奖励政策(2月1日~2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- [Python]网络爬虫(一):抓取网页的含义和URL基本构成
一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...