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

转载于:https://www.cnblogs.com/zzr-stdio/p/9907164.html

gocryptfs 是一个使用 Go 开发的,加密的覆盖文件系统。gocryptfs 基于 go-fuse FUSE 库和其 LoopbackFileSystem API 构建。gocryptfs 灵感来源于 EncFS,修复了其安全问题,提供更好的性能。gocryptfs 当前只支持 Linux 系统,以后会继续支持 OS X。安装:$ go get github.com/rfjakob/gocryptfs使用:$ mkdir cipher plain $ $GOPATH/bin/gocryptfs --init cipher   [...] $ $GOPATH/bin/gocryptfs cipher plain   [...] $ echo test > plain/test.txt $ ls -l cipher   total 8   -rw-rw-r--. 1 user  user   33  7. Okt 23:23 0ao8Hyyf1A-A88sfNvkUxA==   -rw-rw-r--. 1 user  user  233  7. Okt 23:23 gocryptfs.conf $ fusermount -u plain性能:./benchmark.bash gocryptfs v0.3.1-30-gd69e0df-dirty; on-disk format 2 PASS BenchmarkStreamWrite-2       100      12246070 ns/op      85.63 MB/s BenchmarkStreamRead-2        200       9125990 ns/op     114.90 MB/s BenchmarkCreate0B-2        10000        101284 ns/op BenchmarkCreate1B-2        10000        178356 ns/op       0.01 MB/s BenchmarkCreate100B-2       5000        361014 ns/op       0.28 MB/s BenchmarkCreate4kB-2        5000        375035 ns/op      10.92 MB/s BenchmarkCreate10kB-2       3000        491071 ns/op      20.85 MB/s ok      github.com/rfjakob/gocryptfs/integration_tests  17.216s 标签:文件加密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值