golang中tar膨胀和解压文件概略

休闲 · 2026-08-02 01:09:24

搜检官方文档 ,膨胀官方自带的和解演示 :

// 官方演示package main import (    "archive/tar"    "bytes"    "fmt"    "io"    "log"    "os") func main() {     // 将若干很多若干文件写进膨胀文档    // 这边源文件是直接写在代码里哈

,然后也没有输进一个文档    // 后背会演示源文件举办膨胀,压文然后输进一个tar.gz的膨胀膨胀文档    var buf bytes.Buffer    tw := tar.NewWriter(&buf)    var files = []struct {         Name, Body string    }{         { "readme.txt", "This archive contains some text files."},        { "gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},        { "todo.txt", "Get animal handling license."},    }    for _, file := range files {         hdr := &tar.Header{             Name: file.Name,            Mode: 0600,            Size: int64(len(file.Body)),        }        if err := tw.WriteHeader(hdr); err != nil {             log.Fatal(err)        }        if _, err := tw.Write([]byte(file.Body)); err != nil {             log.Fatal(err)        }    }    if err := tw.Close(); err != nil {         log.Fatal(err)    }     // 上面膨胀了此后
,膨胀内容都存储在buf这个变量里    // 这边遍历输进一下便可    tr := tar.NewReader(&buf)    for {         hdr,和解 err := tr.Next()        if err == io.EOF {             break // 文件已遍历完成了        }        if err != nil {             log.Fatal(err)        }        fmt.Printf("%s的文件内容: ", hdr.Name)        if _, err := io.Copy(os.Stdout, tr); err != nil {             log.Fatal(err)        }        fmt.Println()    } }

1 、膨胀并输进tar.gz文档

官方的压文演示中并未将膨胀的内容输进文档 ,理论独霸中经常会用到 。膨胀这边可用os库中的和解文件独霸,将膨胀内容写进文档,压文参考

代码以下  :

// tar膨胀// 这边演示一下从源文件举办膨胀,膨胀然后输进一个tar.gz文档// 作者
:陈杰斌// 参考地址
:http://www.01happy.com/golang-tar/package main import (    "archive/tar"    "bytes"    "log"    "os") func main() {     // 成立一个缓冲区用来保管膨胀文件内容    var buf bytes.Buffer    // 成立一个膨胀文档    tw := tar.NewWriter(&buf)     // 定义一堆文件    // 将文件写进到膨胀文档tw    var files = []struct {         Name,和解 Body string    }{         { "readme.txt", "This archive contains some text files."},        { "gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},        { "todo.txt", "Get animal handling license."},    }    for _, file := range files {         hdr := &tar.Header{             Name: file.Name,            Mode: 0600,            Size: int64(len(file.Body)),        }        if err := tw.WriteHeader(hdr); err != nil {             log.Fatal(err)        }        if _, err := tw.Write([]byte(file.Body)); err != nil {             log.Fatal(err)        }    }    if err := tw.Close(); err != nil {         log.Fatal(err)    }     // 将膨胀文档内容写进文件 file.tar.gz    f, err := os.OpenFile("file.tar.gz", os.O_CREATE|os.O_WRONLY, 0666)    if err != nil {         log.Fatal(err)    }    buf.WriteTo(f)}

奉行一下哈 :

> go run compress.go 

golang中tar膨胀 :

2 、tar解膨胀

同上,压文可独霸os库将文档内容读进

// tar解膨胀演示// 这边演示一下从源文件举办解压,膨胀然后输进文件内容// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import (    "archive/tar"    "fmt"    "io"    "log"    "os") func main() {     // 解压需求独霸tar.NewReader编制,和解 这浅近例领受一个io.Reader对象    // 何处若何从源文件掉落踪掉落踪io.Reader对象呢
?    // 这边经由过程os.Open翻开文件,会掉落踪掉落踪一个os.File对象,    // 因为他完成了io.Reader的压文Read编制
,全数可以直接传递给tar.NewReader    file, err := os.Open("file.tar.gz")    if err != nil {         log.Fatalln(err)    }    defer file.Close()     // tar对象读取文件内容, 遍历输进文件内容    tr := tar.NewReader(file)    for {         hdr, err := tr.Next()        if err == io.EOF {             break // End of archive        }        if err != nil {             log.Fatal(err)        }        fmt.Printf("%s文件内容:\n", hdr.Name)        if _, err := io.Copy(os.Stdout, tr); err != nil {             log.Fatal(err)        }        fmt.Println()    }}

奉行一下 :

> go run decompress.go  

golang中tar解压 :

到此这篇关于golang中tar膨胀和解压

搜检官方文档,官方自带的演示:

// 官方演示package main import (    "archive/tar"    "bytes"    "fmt"    "io"    "log"    "os") func main() {     // 将若干很多若干文件写进膨胀文档    // 这边源文件是直接写在代码里哈,然后也没有输进一个文档    // 后背会演示源文件举办膨胀
,然后输进一个tar.gz的膨胀文档    var buf bytes.Buffer    tw := tar.NewWriter(&buf)    var files = []struct {         Name, Body string    }{         { "readme.txt", "This archive contains some text files."},        { "gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},        { "todo.txt", "Get animal handling license."},    }    for _, file := range files {         hdr := &tar.Header{             Name: file.Name,            Mode: 0600,            Size: int64(len(file.Body)),        }        if err := tw.WriteHeader(hdr); err != nil {             log.Fatal(err)        }        if _, err := tw.Write([]byte(file.Body)); err != nil {             log.Fatal(err)        }    }    if err := tw.Close(); err != nil {         log.Fatal(err)    }     // 上面膨胀了此后,膨胀内容都存储在buf这个变量里    // 这边遍历输进一下便可    tr := tar.NewReader(&buf)    for {         hdr, err := tr.Next()        if err == io.EOF {             break // 文件已遍历完成了        }        if err != nil {             log.Fatal(err)        }        fmt.Printf("%s的文件内容: ", hdr.Name)        if _, err := io.Copy(os.Stdout, tr); err != nil {             log.Fatal(err)        }        fmt.Println()    } }

1 、膨胀并输进tar.gz文档

官方的演示中并未将膨胀的内容输进文档,理论独霸中经常会用到。这边可用os库中的文件独霸 ,将膨胀内容写进文档 ,参考

代码以下 :

// tar膨胀// 这边演示一下从源文件举办膨胀,然后输进一个tar.gz文档// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import (    "archive/tar"    "bytes"    "log"    "os") func main() {     // 成立一个缓冲区用来保管膨胀文件内容    var buf bytes.Buffer    // 成立一个膨胀文档    tw := tar.NewWriter(&buf)     // 定义一堆文件    // 将文件写进到膨胀文档tw    var files = []struct {         Name, Body string    }{         { "readme.txt", "This archive contains some text files."},        { "gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},        { "todo.txt", "Get animal handling license."},    }    for _, file := range files {         hdr := &tar.Header{             Name: file.Name,            Mode: 0600,            Size: int64(len(file.Body)),        }        if err := tw.WriteHeader(hdr); err != nil {             log.Fatal(err)        }        if _, err := tw.Write([]byte(file.Body)); err != nil {             log.Fatal(err)        }    }    if err := tw.Close(); err != nil {         log.Fatal(err)    }     // 将膨胀文档内容写进文件 file.tar.gz    f, err := os.OpenFile("file.tar.gz", os.O_CREATE|os.O_WRONLY, 0666)    if err != nil {         log.Fatal(err)    }    buf.WriteTo(f)}

奉行一下哈:

> go run compress.go 

golang中tar膨胀 :

2、tar解膨胀

同上 ,可独霸os库将文档内容读进

// tar解膨胀演示// 这边演示一下从源文件举办解压,然后输进文件内容// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import (    "archive/tar"    "fmt"    "io"    "log"    "os") func main() {     // 解压需求独霸tar.NewReader编制, 这浅近例领受一个io.Reader对象    // 何处若何从源文件掉落踪掉落踪io.Reader对象呢?    // 这边经由过程os.Open翻开文件,会掉落踪掉落踪一个os.File对象,    // 因为他完成了io.Reader的Read编制,全数可以直接传递给tar.NewReader    file, err := os.Open("file.tar.gz")    if err != nil {         log.Fatalln(err)    }    defer file.Close()     // tar对象读取文件内容, 遍历输进文件内容    tr := tar.NewReader(file)    for {         hdr, err := tr.Next()        if err == io.EOF {             break // End of archive        }        if err != nil {             log.Fatal(err)        }        fmt.Printf("%s文件内容:\n", hdr.Name)        if _, err := io.Copy(os.Stdout, tr); err != nil {             log.Fatal(err)        }        fmt.Println()    }}

奉行一下:

> go run decompress.go  

golang中tar解压  :

到此这篇关于golang中tar膨胀和解压Go言语

文章推荐:

詹姆斯3次周最好糊口糊口第64次 有看第五次掉落踪掉落踪MVP称呼

斗罗除夜陆魂师对决外附魂骨重铸编制

光遇潜海季第五个义务攻略

暗黑剑侠逍远派羁绊组合搭配攻略

大胆鬼生意最新消息内幕:险用库里 、汤普森换保罗

官网seo优化对于中小企业发展有哪些助推作用 ?

重温网站页面性能优化的34条黄金守则

针对企业网站排名提出的三大白帽seo优化方法

科比宣布介中选秀24周年 昔时被黄蜂选中后生意到湖人

斗罗除夜陆魂师对决千劫猫虎气焰搭配推荐攻略

庆余年手游双刃连招攻略

解析网站写入Robots.txt文件之后会被搜索引擎蜘蛛收录的原因

热门浏览