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 ...
随机推荐
- jQuery对象和DOM对象原来不一样啊
jQuery对象和DOM对象使用说明,需要的朋友可以参考下.1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DOM对象,因此需要重点了解jQuery ...
- DELL笔记本拆机添加内存条
在笔记本后面拧开7个螺丝 然后打开后盖 掰开卡口,内存条会弹出,此时按住内存条两侧的缺口往外用力就可以拔出内存条. 装入内存条时,先插入内存条,按下即可.
- 【转】Windows7 下安装 JDK 7 时版本冲突问题解决
原文网址:http://wxl24life.iteye.com/blog/1966058 自己电脑上一直用的 JDK 版本是 1.6,今天决定更新到 1.7,在安装 JDK 1.7 后,控制台输入 j ...
- (转载)C++中将构造函数或析构函数定义为private
(转载)http://www.blogjava.net/fhtdy2004/archive/2009/05/30/278971.html C++中将构造函数或析构函数定义为private 很多情况下要 ...
- Ubuntu下安装PAC Manager
在Windows下习惯使用XShell.PAC Manager其实就是一个在Linux系统类似XShell的工具. 下载地址: https://sourceforge.net/projects/pac ...
- strcpy,memcpy,内存块重叠
前段时间准备面试,看了一些库函数的实现,在看到memcpy时,发现有处理source和destination所指内存有重叠的情况,而strcpy没有,特别模仿库函数写了这个函数,并进行了测试.以下是具 ...
- JavaScript高级程序设计35.pdf
遍历 “DOM2级遍历和范围”模块定义了两个用于辅助完成顺序遍历DOM结构的类型:NodeIterator和TreeWalker,两个类型能够基于给定的起点对DOM结构执行深度优先(depth-fir ...
- linux 下查看网速的方法 (不需要安装任何软件)
sudo watch -n 1 "/sbin/ifconfig eth0 | grep -E \"字节|数据包\"" 若是英文版linux: sudo watc ...
- jQuery之前端国际化jQuery.i18n.properties
jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. 国际化英文单词为:Internationalization,又称i18n,"i& ...
- (6/18)重学Standford_iOS7开发_控制器多态性、导航控制器、选项卡栏控制器_课程笔记
终于有时间跟新了,两周时间复(yu)习(xi)了5门考试累觉不爱...... ------------------------------------------------------------- ...