二进制转文件以及文件压缩和解压缩
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 + @"\new_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:\\windows\abc.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 }
作者:江宁织造
博客:http://www.cnblogs.com/wgx0428/
博客:http://www.cnblogs.com/wgx0428/