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)
}
突然发现好像不支持压缩加密,这个得再学习一下了。