首先是恭喜IG獲得S8全球總決賽冠軍,IG牛逼。但咱是一介草民,狂歡後,還是得老老實實的開始敲代碼。 最近做了一個給底層固件壓縮加密的工具,是使用C 做的,已經提交出去可以正常使用的。既然在學習Go語言, 那我很慣性的想到,能不能使用Go來做這塊,咱界面還是使用winform,壓縮這一塊可以使用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)
}
突然發現好像不支持壓縮加密,這個得再學習一下了。