zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU5818 Joint Stacks 左偏树,可并堆
    HDU1512 ZOJ2334 Monkey King 左偏树
    BZOJ3626 [LNOI2014]LCA 树链剖分 线段树
    BZOJ4034 [HAOI2015]树上操作 树链剖分
    BZOJ1146 [CTSC2008]网络管理Network 树链剖分 主席树 树状数组
    BZOJ1968 [Ahoi2005]COMMON 约数研究 数论
    BZOJ2759 一个动态树好题 LCT
    BZOJ3669 [Noi2014]魔法森林 LCT
    HDFS要点
    HDFS(0.20.2)运营中急救方案
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/9907164.html
Copyright © 2011-2022 走看看