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

焦点 · 2026-09-23 02:12:56

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

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

文章推荐:

深空之眼十曜金乌神格选甚么好 深空之眼十曜金乌神格推荐

Excel 中批量在数字后面添加汉字的编制

猫咪走丢了 ?教你找回走损掉落踪落的猫咪

春季养狗需求寄看甚么?

长时无间手游席拉禀赋若何搭配 席拉禀赋搭配推荐

Premiere 视频措置之往除布景物华 ,编制不宏壮

萌萌的小兔子的声响、行动分析

狗狗疫苗与驱虫的编制和时分

抖音商城官方抢茅台攻略是甚么 ?茅台是真的吗?

啄羊鹦鹉理应若何豢养 ?

教你切确抱猫咪的编制

猫粮的选购身手,给猫咪吃甚么最好 ?

热门浏览