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 ...
随机推荐
- 3.android下Makefile编写规范
随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开 ...
- 数据库sql整体整理
create database 数据库 /* 数据库的服务.数据库文件. */ --修改表添加列 create table biao ( name ) ) ) --往表里增加一列 alter tabl ...
- opengl学习
#include"stdafx.h" #define GLUT_DISABLE_ATEXIT_HACK #include <GL/glut.h> //glut自动将gl ...
- sorts
各种排序算法: #include <stdio.h> #include <string.h> #include <ctype.h> #include <std ...
- Performance Counter的使用
原文地址:http://blog.csdn.net/jiangxinyu/article/details/5480401 PerformanceCounter 基本介绍以及示例方法 一 Perform ...
- lfs遇到的一些问题--后续阶段
1.安装GPM-1.20.7,make install出错: prog/display-buttons.c:39:57: 致命错误:gpm.h:没有那个文件或目录 #include <gpm.h ...
- (转载)TRS的WCM6漏洞权限绕过以及绕过密码的登陆方式
转载于:http://www.2cto.com/Article/201302/191261.html 1.由来:建立在 TRS的WCM6可直接获取管理员密码 漏洞的基础上 2.首先访问wcm目录, ...
- ios UI 之间的切换方法,using prepareForSegue and not
1, use prepareForSegue: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { RWTDe ...
- linux下如何执行PHP脚本
Linux 下如何直接执行 php 脚本? 下面是部分 php 命令行参数. 用法 php [-q] [-h] [-s] [-v] [-i] [-f ] | { [args...]} -q 安静模式, ...
- 问题-安装XP时,提示不识别SATA硬盘
问题现象:笔记本装XP时,系统提示硬盘不能被识别? 问题描述:我原来是vista版本的,硬盘是SATA接口,但我觉得用vista不习惯,所以想装XP,可后来发现机器无法识别硬盘,该怎么解决? 问题原因 ...