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)
}

突然发现好像不支持压缩加密,这个得再学习一下了。

11

原文地址:https://www.cnblogs.com/zzr-stdio/p/9907164.html