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

  • 相关阅读:
    多线程循环打印ABC
    程序员如何提高影响力
    一文详解bundle adjustment
    粒子滤波到底是怎么得到的?
    多视图立体匹配论文分享CasMVSNet
    入坑slam,一位博士小姐姐的科研和成长分享(考研+读研+读博)
    【车道线检测】一种基于神经网络+结构约束的车道线检测方法
    FCGF-基于稀疏全卷积网络的点云特征描述子提取(ICCV2019)
    多视图立体匹配论文分享PVA-MVSNet
    姿态估计算法汇总|基于RGB、RGB-D以及点云数据
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/9907164.html
Copyright © 2011-2022 走看看