• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go压缩文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

首先是恭喜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)
}

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Go]字符串转int64数值型发布时间:2022-07-10
下一篇:
Go常量与枚举类型发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap