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

  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/9907164.html
Copyright © 2011-2022 走看看