铁汉展开筹算锦衣卫弄法攻略

综合 8973℃

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

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