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

知识 · 2026-09-13 04:59:00

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

// 官方演示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言语

文章推荐:

小厨房装修终局图 小厨房装修要点

打破区域限制 群集平台成多款新药首发渠道

半月板、跟腱毁伤 多是因为行动姿式欠妥

第十四届中国抗癌协会肿瘤养分学除夜会在广东北宁举办

《稀少女侠1984》雅不雅不雅不雅不雅不雅不雅吗讲甚么 史蒂夫扮演者分享幕后

低温天慢病群体免疫承压 专家提示:自创带状疱疹“混水摸鱼”

出世偏向防治公益项目在沪启动

往日诰日立秋早餐把鸡蛋换成它 嗓子润了 、晚上睡结壮了

复式楼豪华装修身手 装修寄看事项

AI生成的减肥筹算,幻想下场能不克不及信赖?专家分化

樊嘉院士 :中国肝癌医治正转向“协同攻坚战”

樊嘉院士:中国肝癌医治正转向“协同攻坚战”

热门浏览

标签列表