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

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

Go压缩文件的更多相关文章

  1. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  2. C#基础-压缩文件及故障排除

    C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...

  3. 破解压缩文件密码rarcrack

    破解压缩文件密码rarcrack   常见的压缩文件格式有ZIP.RAR和7z.这三种格式都支持使用密码进行加密压缩.前面讲过破解ZIP压缩文件,可以使用fcrackzip.对于RAR和7z格式,可以 ...

  4. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  5. java ZipOutputStream压缩文件,ZipInputStream解压缩

    java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...

  6. C# 压缩文件与字节互转

    public class ZipBin { public byte[] bytes; //C#读取压缩文件(将压缩文件转换为二进制 public void GetZipToByte(string in ...

  7. Linux如何复制,打包,压缩文件

    (1)复制文件 cp -r  要copy的文件/("/"指的是包括里面的内容)   newfile_name(要命名的文件名) eg:cp -r webapps_zero/   f ...

  8. java生成压缩文件

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutput ...

  9. 7z压缩文件时排除指定的文件

    分享一个7z压缩文件时排除指定文件类型的命令行,感觉很有用: 7z a -t7z d:\updateCRM.7z d:\updateCRM\*.* -r -x!*.log -x!*bak a:创建压缩 ...

  10. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

随机推荐

  1. node (1)

    一.介绍 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端. 但Node似乎有点不同: ● Node.js不是一种独立的语言,与PHP. ...

  2. springboot学习网站及博客

    1关于Spring Boot的博客集合https://www.jianshu.com/p/7e2e5e7b32ab 2泥瓦匠BYSocket的Spring Boot系列 https://www.bys ...

  3. 新建一个去除storyboard的项目

    新建一个去除storyboard的项目 1. 新建项目并删除 *.storyboard 以及与之相关的杂项 2. 设置 UIWindow 的 rootViewController 复制粘贴代码如下 s ...

  4. [翻译] OCMaskedTextField

    OCMaskedTextField https://github.com/OmerCora/OCMaskedTextField Simple class to display dynamically ...

  5. 超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

    超简易复制Model对象(为后续备忘录设计模式博文做铺垫) 复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法, ...

  6. 关于Matlab里面的四个取整(舍入)函数:Floor, Ceil, Fix, Round的解释(转)

    转自http://blog.sina.com.cn/s/blog_48ebd4fb010009c2.html   floor:朝负无穷方向舍入 B = floor(A) rounds the elem ...

  7. 面向对象程序设计_Task4_Calculator1.1

    The 2nd part of the Calculator program 题目链接:Click Here github链接:Click Here 诶嘿,第二部分,要开始实现计算的功能了,估计离不是 ...

  8. ORA-28001: the password has expired (DBD ERROR: OCISessionBegin)解决办法

    1.问题描述: 打开oracle在线管理页面发现这个错误:界面如下 2问题原因 造成这个问题的主要原因是因为DBSNMP .SYSMAN用户密码已经过期. 3解决办法 可以使用sys以管理员的身份登录 ...

  9. Nginx变量.md

    ngx_http_core_module ngx_http_core_module模块支持名称与Apache服务器变量匹配的嵌入式变量. 首先,这些是表示客户请求头字段的变量,例如$ http_use ...

  10. Linux环境变量配置文件/etc/profile、/etc/bashrc、~/.bashrc的区别以及一些隐藏文件的作用

    ①/etc/profile: 该文件登录操作系统时,为每个用户设置环境信息,当用户第一次登录时,该文件被执行.也就是说这个文件对每个shell都有效,用于获取系统的环境信息. ②/etc/bashrc ...