• 二进制转文件以及文件压缩和解压缩


     1         #region 将本地压缩文件转换为Base64编码
     2         /// <summary>
     3         /// 将本地压缩文件转换为Base64编码
     4         /// </summary>
     5         /// <returns></returns>
     6         public string ReturnBase64Code()
     7         {
     8             //从服务器获取到的文件路径
     9             string ys_filePath =  rootDirectoryPath + @"hx.zip";   
    10             //将压缩文件转换为二进制
    11             using (FileStream fs = new FileStream(ys_filePath, FileMode.Open))
    12             {
    13                 byte[] bytes = new byte[fs.Length];
    14                 int count = Convert.ToInt32(fs.Length);
    15                 fs.Read(bytes, 0, count);
    16                 fs.Close();
    17                 //将二进制转为为base64
    18                 return Convert.ToBase64String(bytes);
    19             } 
    20         }
    21         #endregion
     1         #region 直接删除指定目录下的所有文件及文件夹(保留目录)
     2         /// <summary>
     3         /// 直接删除指定目录下的所有文件及文件夹(保留目录)
     4         /// </summary>
     5         /// <param name="strPath">文件夹路径</param>
     6         /// <returns>执行结果</returns>
     7         public bool DeleteDir(string strPath)     
     8  9             try         
    10             {
    11                 strPath = @strPath.Trim().ToString();// 清除空格 
    12                 if (System.IO.Directory.Exists(strPath))  // 判断文件夹是否存在            
    13 14                     // 获得文件夹数组 
    15                     string[] strDirs = System.IO.Directory.GetDirectories(strPath); // 获得文件数组 
    16                     string[] strFiles = System.IO.Directory.GetFiles(strPath); // 遍历所有子文件夹 
    17                     foreach (string strFile in strFiles)                 
    18 19                         // 删除文件夹 
    20                         System.IO.File.Delete(strFile);                 
    21 22                     // 遍历所有文件 
    23                     foreach (string strdir in strDirs)                 
    24 25                         // 删除文件 
    26                         System.IO.Directory.Delete(strdir, true);                 
    27                     }             
    28                 }
    29                 return true;                     
    30 31             catch (Exception Exp) // 异常处理         
    32             {
    33                 System.Diagnostics.Debug.Write(Exp.Message.ToString()); // 异常信息 
    34                 return false;         
    35             }  
    36         }
    37         #endregion
    
    
     1         #region 定时下载广告文件
     2         public void theout(object source, System.Timers.ElapsedEventArgs e)
     3         {
     4             string str = ReturnBase64Code();//将二进制转为为base64
     5 
     6             byte[] outputb = Convert.FromBase64String(str);//将base64编码转换为二进制
     7 
     8             //将二进制转换为压缩文件
     9             string path = rootDirectoryPath + @"
    ew_hx.zip";//压缩文件的地址 
    10             File.WriteAllBytes(path, outputb);
    11 
    12             //删除广告目录下已经存在的文件
    13             if (Directory.Exists(filePath))
    14             {
    15                 DeleteDir(filePath);
    16             }
    17             //解压文件
    18             bool result = bonkerZip.UnZipFile(path, filePath); //  DeCompressionZip
    19             if (!result)
    20             {
    21                 ErrorLog.WriteErrorLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "广告文件解压失败,失败原因:"+bonkerZip.errorMsg);
    22             }
    23             webBrowser1.Navigate(filePath+@"index.html");
    24         } 
    25         #endregion
      1 public class BonkerZip
      2     {
      3         /// <summary>
      4         /// 存放待压缩的文件的绝对路径
      5         /// </summary>
      6         private List<string> AbsolutePaths { set; get; }
      7         public string errorMsg { set; get; }
      8 
      9         public BonkerZip()
     10         {
     11             errorMsg = "";
     12             AbsolutePaths = new List<string>();
     13         }
     14         /// <summary>
     15         /// 添加压缩文件
     16         /// </summary>
     17         /// <param name="_fileAbsolutePath">文件的绝对路径</param>
     18         public void AddFile(string _fileAbsolutePath)
     19         {
     20             AbsolutePaths.Add(_fileAbsolutePath);
     21         }
     22         /// <summary>
     23         /// 压缩文件或者文件夹
     24         /// </summary>
     25         /// <param name="_depositPath">压缩后文件的存放路径   如C:\windowsabc.zip</param>
     26         /// <returns></returns>
     27         public bool CompressionZip(string _depositPath)
     28         {
     29             bool result = true;
     30             FileStream fs = null;
     31             try
     32             {
     33                 ZipOutputStream ComStream = new ZipOutputStream(File.Create(_depositPath));
     34                 ComStream.SetLevel(9);      //压缩等级
     35                 foreach (string path in AbsolutePaths)
     36                 {
     37                     //如果是目录
     38                     if (Directory.Exists(path))
     39                     {
     40                         ZipFloder(path, ComStream, path);
     41                     }
     42                     else if (File.Exists(path))//如果是文件
     43                     {
     44                          fs = File.OpenRead(path);
     45                         byte[] bts = new byte[fs.Length];
     46                         fs.Read(bts, 0, bts.Length);
     47                         ZipEntry ze = new ZipEntry(new FileInfo(path).Name);
     48                         ComStream.PutNextEntry(ze);             //为压缩文件流提供一个容器
     49                         ComStream.Write(bts, 0, bts.Length);  //写入字节
     50                     }
     51                 }
     52                 ComStream.Finish(); // 结束压缩
     53                 ComStream.Close();
     54             }
     55             catch (Exception ex)
     56             {
     57                 if (fs != null)
     58                 {
     59                     fs.Close();
     60                 }
     61                 errorMsg = ex.Message;
     62                 result = false;
     63             }
     64             return result;
     65         }
     66         //压缩文件夹
     67         private void ZipFloder(string _OfloderPath, ZipOutputStream zos, string _floderPath)
     68         {
     69             foreach (FileSystemInfo item in new DirectoryInfo(_floderPath).GetFileSystemInfos())
     70             {
     71                 if (Directory.Exists(item.FullName))
     72                 {
     73                     ZipFloder(_OfloderPath, zos, item.FullName);
     74                 }
     75                 else if (File.Exists(item.FullName))//如果是文件
     76                 {
     77                     DirectoryInfo ODir = new DirectoryInfo(_OfloderPath);
     78                     string fullName2 = new FileInfo(item.FullName).FullName;
     79                     string path = ODir.Name + fullName2.Substring(ODir.FullName.Length, fullName2.Length - ODir.FullName.Length);//获取相对目录
     80                     FileStream fs = File.OpenRead(fullName2);
     81                     byte[] bts = new byte[fs.Length];
     82                     fs.Read(bts, 0, bts.Length);
     83                     ZipEntry ze = new ZipEntry(path);
     84                     zos.PutNextEntry(ze);             //为压缩文件流提供一个容器
     85                     zos.Write(bts, 0, bts.Length);  //写入字节
     86                 }
     87             }
     88         }
     89         /// <summary>
     90         /// 解压
     91         /// </summary>
     92         /// <param name="_depositPath">压缩文件路径</param>
     93         /// <param name="_floderPath">解压的路径</param>
     94         /// <returns></returns>
     95         public bool DeCompressionZip(string _depositPath, string _floderPath)
     96         {
     97             bool result = true;
     98             FileStream fs=null;
     99             try
    100             {
    101                 using (ZipInputStream InpStream = new ZipInputStream(File.OpenRead(_depositPath)))
    102                 {
    103                     ZipEntry ze = InpStream.GetNextEntry();//获取压缩文件中的每一个文件
    104                     Directory.CreateDirectory(_floderPath);//创建解压文件夹
    105                     while (ze != null)//如果解压完ze则是null
    106                     {
    107                         if (ze.IsFile)//压缩zipINputStream里面存的都是文件。带文件夹的文件名字是文件夹\文件名
    108                         {
    109                             string[] strs = ze.Name.Split('\');//如果文件名中包含’\‘则表明有文件夹
    110                             if (strs.Length > 1)
    111                             {
    112                                 //两层循环用于一层一层创建文件夹
    113                                 for (int i = 0; i < strs.Length - 1; i++)
    114                                 {
    115                                     string floderPath = _floderPath;
    116                                     for (int j = 0; j < i; j++)
    117                                     {
    118                                         floderPath = floderPath + "\" + strs[j];
    119                                     }
    120                                     floderPath = floderPath + "\" + strs[i];
    121                                     Directory.CreateDirectory(floderPath);
    122                                 }
    123                             }
    124                             fs = new FileStream(_floderPath + "\" + ze.Name, FileMode.OpenOrCreate, FileAccess.Write);//创建文件
    125                             //循环读取文件到文件流中
    126                             while (true)
    127                             {
    128                                 byte[] bts = new byte[1024];
    129                                 int i = InpStream.Read(bts, 0, bts.Length);
    130                                 if (i > 0)
    131                                 {
    132                                     fs.Write(bts, 0, i);
    133                                 }
    134                                 else
    135                                 {
    136                                     fs.Flush();
    137                                     fs.Close();
    138                                     break;
    139                                 }
    140                             }
    141                         }
    142                         ze = InpStream.GetNextEntry();
    143                     }
    144                 }
    145             }
    146             catch (Exception ex)
    147             {
    148                 if (fs != null)
    149                 {
    150                     fs.Close();
    151                 }
    152                 errorMsg = ex.Message;
    153                 result = false;
    154             }
    155             finally
    156             {
    157                 if (fs != null)
    158                 {
    159                     fs.Close();
    160                     fs.Dispose();
    161                 }
    162             }
    163             return result;
    164         }
    165 
    166 
    167         /// <summary>
    168         /// 功能:解压zip格式的文件。
    169         /// </summary>
    170         /// <param name="zipFilePath">压缩文件路径</param>
    171         /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
    172         /// <param name="err">出错信息</param>
    173         /// <returns>解压是否成功</returns>
    174         public bool UnZipFile(string zipFilePath, string unZipDir)// , out string err
    175         {
    176             // err = "";
    177             if (zipFilePath == string.Empty)
    178             {
    179                 //err = "压缩文件不能为空!";
    180                 return false;
    181             }
    182             if (!File.Exists(zipFilePath))
    183             {
    184                 //err = "压缩文件不存在!";
    185                 return false;
    186             }
    187             //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
    188             if (unZipDir == string.Empty)
    189                 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
    190             if (!unZipDir.EndsWith("\"))
    191                 unZipDir += "\";
    192             if (!Directory.Exists(unZipDir))
    193                 Directory.CreateDirectory(unZipDir);
    194 
    195             try
    196             {
    197                 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath.ToLower())))
    198                 {
    199 
    200                     ZipEntry theEntry;
    201                     while ((theEntry = s.GetNextEntry()) != null)
    202                     {
    203                         string directoryName = Path.GetDirectoryName(theEntry.Name);
    204                         string fileName = Path.GetFileName(theEntry.Name);
    205                         if (directoryName.Length > 0)
    206                         {
    207                             Directory.CreateDirectory(unZipDir + directoryName);
    208                         }
    209                         if (!directoryName.EndsWith("\"))
    210                             directoryName += "\";
    211                         if (fileName != String.Empty)
    212                         {
    213                             using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
    214                             {
    215 
    216                                 int size = 2048;
    217                                 byte[] data = new byte[2048];
    218                                 while (true)
    219                                 {
    220                                     size = s.Read(data, 0, data.Length);
    221                                     if (size > 0)
    222                                     {
    223                                         streamWriter.Write(data, 0, size);
    224                                     }
    225                                     else
    226                                     {
    227                                         break;
    228                                     }
    229                                 }
    230                             }
    231                         }
    232                     }//while
    233                 }
    234             }
    235             catch (Exception ex)
    236             {
    237                 //err = ex.Message;
    238                 return false;
    239             }
    240             return true;
    241         }//解压结束
    242 
    243     }
     
  • 相关阅读:
    109. 有序链表转换二叉搜索树
    108. 将有序数组转换为二叉搜索树
    235. 二叉搜索树的最近公共祖先
    538. 把二叉搜索树转换为累加树
    230. 二叉搜索树中第K小的元素
    669. 修剪二叉搜索树
    513. 找树左下角的值
    637. 二叉树的层平均值
    671. 二叉树中第二小的节点
    DDL-Oracle中的5种约束总结(未完待续)
  • 原文地址:https://www.cnblogs.com/wgx0428/p/3569748.html
Copyright © 2020-2023  润新知