zoukankan      html  css  js  c++  java
  • C# 文件粉碎

    >文件粉碎的流程

    1. 填充文件
    2. 更改最后使用/创建时间
    3. 更改名称
    4. 将大小改为 0 kb
    5. 删除 
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.IO;
      5 
      6 namespace RocketStudio
      7 {
      8     class ShredFile
      9     {
     10         /// <summary>
     11         /// 文件粉碎选项
     12         /// </summary>
     13         public enum ShredMode
     14         {
     15             /// <summary>
     16             /// 随机数
     17             /// </summary>
     18             RandData,
     19             /// <summary>
     20             /// 指定的Byte
     21             /// </summary>
     22             UserByte,
     23             /// <summary>
     24             /// 指定的字符串
     25             /// </summary>
     26             UserString
     27         }
     28         /// <summary>
     29         /// 将指定的流粉碎使用随机数
     30         /// </summary>
     31         /// <param name="fs">文件流</param>
     32         /// <returns></returns>
     33         public bool Shred(FileStream fs)
     34         {
     35             try
     36             {
     37                 BinaryWriter bw = new BinaryWriter(fs);
     38                 long fileLength = fs.Length;
     39                 long writeBytes = 0;
     40                 Random random = new Random();
     41                 byte[] data = new byte[10240];
     42                 random.NextBytes(data);
     43 
     44                 for (; writeBytes < fileLength; writeBytes += 10240)
     45                 {
     46                     if (fileLength - writeBytes > 10240)
     47                         bw.Write(data);
     48                     else bw.Write(data, 0, (int)(fileLength - writeBytes));
     49                 }
     50                 fs.Flush();
     51                 return true;
     52             }
     53             catch
     54             {
     55                 return false;
     56             }
     57         }
     58         /// <summary>
     59         /// 将指定的流粉碎使用指定字符
     60         /// </summary>
     61         /// <param name="fs">文件流</param>
     62         /// <param name="data">字符串</param>
     63         /// <returns></returns>
     64         public bool Shred(FileStream fs, byte data)
     65         {
     66             try
     67             {
     68                 BinaryWriter bw = new BinaryWriter(fs);
     69                 long fileLength = fs.Length;
     70                 long writeBytes = 0;
     71                 for (; writeBytes < fileLength; writeBytes++)
     72                 {
     73                     bw.Write(data);
     74                 }
     75                 fs.Flush();
     76                 return true;
     77             }
     78             catch
     79             {
     80                 return false;
     81             }
     82         }
     83         /// <summary>
     84         /// 将指定的流粉碎使用指定字符串
     85         /// </summary>
     86         /// <param name="fs">文件流</param>
     87         /// <param name="data">字符串</param>
     88         /// <returns></returns>
     89         public bool Shred(FileStream fs, string data)
     90         {
     91             try
     92             {
     93                 BinaryWriter bw = new BinaryWriter(fs);
     94                 long fileLength = fs.Length;
     95                 long writeBytes = 0;
     96                 char[] dataArry = new char[data.Length];
     97                 for (int ii = 0;ii<data.Length;ii++)
     98                 {
     99                     dataArry[ii] = data[ii];
    100                 }
    101                 int dataLength = dataArry.Length;
    102                 for (; writeBytes < fileLength; writeBytes += dataLength)
    103                 {
    104                     if ((fileLength - writeBytes) < dataLength)
    105                         bw.Write(dataArry);
    106                     else bw.Write(dataArry, 0, dataLength);
    107                 }
    108                 fs.Flush();
    109                 return true;
    110             }
    111             catch
    112             {
    113                 return false;
    114             }
    115         }
    116         public void RenameFile(string old, string last)
    117         {
    118             File.Move(old, last);
    119         }
    120         /// <summary>
    121         /// 使用随机数生成文件名
    122         /// </summary>
    123         /// <returns></returns>
    124         private string ReandName()
    125         {
    126             Random random = new Random();
    127             random.Next(1000).ToString();
    128             return random.Next(1000).ToString() + random.Next(1000).ToString() + random.Next(1000).ToString();
    129         }
    130         /// <summary>
    131         /// 开始粉碎
    132         /// </summary>
    133         /// <param name="fileName">文件名</param>
    134         /// <param name="data">填充数据,ShredMode.RandData 将忽略 可为NULL</param>
    135         /// <param name="sm">粉碎文件模式</param>
    136         /// <returns>是否成功</returns>
    137         public bool StartShredFile(string fileName, object data, ShredMode sm, bool IsCleanCreatedDate, bool IsCleanLastUsedDate, bool IsCleanName, bool IsEmptyFile) 
    138         {
    139             FileStream fs = null;
    140             try
    141             {
    142                 fs = File.Open(fileName, FileMode.Open);
    143             }
    144             catch
    145             {
    146                 //error
    147                 return false;
    148             }
    149             bool IsSucceed = false;
    150             switch (sm)
    151             {
    152                 case ShredMode.RandData:
    153                     IsSucceed = Shred(fs);
    154                     break;
    155                 case ShredMode.UserByte:
    156                     IsSucceed = Shred(fs, Convert.ToByte(data));
    157                     break;
    158                 case ShredMode.UserString:
    159                     IsSucceed = Shred(fs, (string)data);
    160                     break;
    161 
    162             }
    163             DateTime dt = new DateTime(2012,12,24);
    164             try
    165             {
    166                 FileInfo fi = new FileInfo(fileName);
    167                 string randName;
    168                 if (IsCleanName)
    169                     randName = ReandName();
    170                 else randName = @""+fi.Name;
    171                
    172                 fs.Close();
    173                 if(IsEmptyFile)
    174                 File.Open(fi.FullName, FileMode.Truncate).Close();
    175                 if(IsCleanName)
    176                 RenameFile(fi.FullName, fi.DirectoryName + randName);
    177                 if(IsCleanCreatedDate)
    178                 File.SetCreationTime(fi.DirectoryName + randName, dt);
    179                 if (IsCleanLastUsedDate)
    180                 {
    181                     if(IsCleanName)
    182                       File.SetLastWriteTime(fi.DirectoryName + randName, dt);
    183                     else
    184                         File.SetLastWriteTime(fi.FullName, dt);
    185                 }
    186                 File.Delete(fi.DirectoryName + randName);
    187             }
    188 
    189             catch
    190             {
    191                 return false;
    192             }
    193             finally { fs.Close(); }
    194             return IsSucceed;
    195         }
    196     }
    197 
    198 }
    View Code

    >如何使用

     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

  • 相关阅读:
    [HTML]安卓下<video>无法点击播放
    [JSP]解决Maven创建项目失败
    [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis)
    [转]Express入门教程:一个简单的博客
    [转][译]关于CSS中的float和position和z-index
    [CSS]多浏览器兼容的垂直居中,兼容多个IE
    [转]非常实用的15款开源PHP类库
    [PHP]使用PHPMailer发送带附件并支持HTML内容的邮件
    ROS中阶笔记(一):机器人系统设计—ROS系统下连接外部传感器
    ROS入门笔记(十三):分布式通信
  • 原文地址:https://www.cnblogs.com/varorbc/p/3422798.html
Copyright © 2011-2022 走看看