Go压缩文件
Go压缩文件
首先是恭喜IG获得S8全球总决赛冠军,IG牛逼。但咱是一介草民,狂欢后,还是得老老实实的开始敲代码。最近做了一个给底层固件压缩加密的工具,是使用C#做的,已经提交出去可以正常使用的。既然在学习Go语言,那我很惯性的想到,能不能使用Go来做这块,咱界面还是使用winform,压缩这一块可以使用Go来做,C#来调用Go编译的exe文件就好了。有人可能会说,干嘛这么麻烦,C#就能完成的事情,为什么还要用Go。哼哼,学习当中,不要问我为什么,老总也不是咱表哥。接下来就贴上咱的成果:
压缩多文件:
package main
import(
"fmt"
"archive/zip"
"bytes"
"os"
)
func main(){
buf := new(bytes.Buffer)
w := zip.NewWriter(buf)
var files = []struct{
Name, Body string
}{
{"hmi.txt", "first"},
{"main11.go", "second"},
}
for _, file := range files{
f, err := w.Create(file.Name)
if err != nil{
fmt.Println(err)
}
_, err = f.Write([]byte(file.Body))
if err != nil{
fmt.Println(err)
}
}
err := w.Close()
if err != nil{
fmt.Println(err)
}
f, err := os.OpenFile("file.zip", os.O_CREATE | os.O_WRONLY, 0666)
if err != nil{
fmt.Println(err)
}
buf.WriteTo(f)
}
解压代码:
func unzip(archive, target string) error{
reader, err := zip.OpenReader(archive)
fmt.Println(archive)
if err != nil{
return err
}
if err := os.MkdirAll(target, 0755); err != nil{
return err
}
for _, file := range reader.File{
path := filepath.Join(target, file.Name)
if file.FileInfo().IsDir(){
os.MkdirAll(path, file.Mode())
continue
}
fileReader, err := file.Open()
if err != nil{
return err
}
defer fileReader.Close()
//targetFile, err := os.OpenFile(path, os.O_WRONLY | os.O_TRUNC, file.Mode())
targetFile, err := os.Create(path)
fmt.Println(path)
if err != nil{
return err
}
defer targetFile.Close()
if _, err := io.Copy(targetFile, fileReader); err != nil{
return err
}
}
return nil
}
func wozip(){
buf := new(bytes.Buffer)
w := zip.NewWriter(buf)
var files = []struct{
Name, Body string
}{
{"hmi.txt", "firsfsdfst"},
{"main11.go", "secsdfsdfond"},
}
for _, file := range files{
f, err := w.Create(file.Name)
if err != nil{
fmt.Println(err)
}
_, err = f.Write([]byte(file.Body))
if err != nil{
fmt.Println(err)
}
}
err := w.Close()
if err != nil{
fmt.Println(err)
}
f, err := os.OpenFile("file.zip", os.O_CREATE | os.O_WRONLY, 0666)
if err != nil{
fmt.Println(err)
}
buf.WriteTo(f)
}
突然发现好像不支持压缩加密,这个得再学习一下了。

Go压缩文件的更多相关文章
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...
- C#基础-压缩文件及故障排除
C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...
- 破解压缩文件密码rarcrack
破解压缩文件密码rarcrack 常见的压缩文件格式有ZIP.RAR和7z.这三种格式都支持使用密码进行加密压缩.前面讲过破解ZIP压缩文件,可以使用fcrackzip.对于RAR和7z格式,可以 ...
- 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...
- java ZipOutputStream压缩文件,ZipInputStream解压缩
java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...
- C# 压缩文件与字节互转
public class ZipBin { public byte[] bytes; //C#读取压缩文件(将压缩文件转换为二进制 public void GetZipToByte(string in ...
- Linux如何复制,打包,压缩文件
(1)复制文件 cp -r 要copy的文件/("/"指的是包括里面的内容) newfile_name(要命名的文件名) eg:cp -r webapps_zero/ f ...
- java生成压缩文件
在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutput ...
- 7z压缩文件时排除指定的文件
分享一个7z压缩文件时排除指定文件类型的命令行,感觉很有用: 7z a -t7z d:\updateCRM.7z d:\updateCRM\*.* -r -x!*.log -x!*bak a:创建压缩 ...
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
随机推荐
- python 字符串格式化符号含义及注释
字符串格式化符号含义 符号 说明 %C 格式化字符及其ASCII码 %S 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) ...
- 网络 OSI参考模型与TCP/IP模型
ISO是国际标准化组织.OSI,开放互联系统.IOS,思科交换机和路由器的操作系统. TCP/IP模型是OSI模型的简化.所有的互联网协议都是基于OSI模型开发的. 分层:便于管理,每层只管理下层,总 ...
- maven jstl、jsp、servlet依赖
jstl.jsp.servlet依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId> ...
- frame shiro 认证示例及原理简述
shiro 认证流程 1.创建一个 javaSE 的maven项目(quickstart),并添加依赖 <dependency> <groupId>junit</grou ...
- oracle的sequence出现gap的问题
转自 http://web4.blog.163.com/blog/static/189694131201132184850561/ 今天碰到一个问题,数据库表有一个字段的值是通过sequence来生成 ...
- 使用Charles进行网络请求抓包解析
使用Charles进行网络请求抓包解析 0. 懒人的福音(⌐■_■)(破解版下载地址,记得安装java库支持) http://pan.baidu.com/s/1c08ksMW 1. 查看电脑的ip地址 ...
- 处理过期的archivelog和rman备份
当手工删除了归档日志以后,Rman备份会检测到日志缺失,从而无法进一步继续执行.所以此时需要手工执行crosscheck过程,之后Rman备份可以恢复正常.[执行顺序如下:手工删除archivelog ...
- 用一个变量表示 ----------"序号,名称,价格"
goods = [{"name": "电脑", "price": 1999}, {"name": & ...
- if a in range(len(lst)): print(a,lst[a]) #获取索引和对应元素, 背下来~~
经典的"获取元素的索引和元素", 背下来! if a in range(len(lst)): print(a, lst[a])
- Django 错误之 No module named ‘MySQLdb’
由于卸载Mysql时将很多相关依赖包都卸载了,重装mysql后启动django出现如下错误: django.core.exceptions.ImproperlyConfigured:Error loa ...