package main import ( "archive/tar" "fmt" "io" "os" ) func main() { f, err := os.Create("./output.tar") //创建一个 tar 文件 if err != nil { fmt.Println(err) return } defer f.Close() tw := tar.NewWriter(f) defer tw.Close() fileinfo, err := os.Stat("./main.exe") //获取文件相关信息 if err != nil { fmt.Println(err) } hdr, err := tar.FileInfoHeader(fileinfo, "") if err != nil { fmt.Println(err) } err = tw.WriteHeader(hdr) //写入头文件信息 if err != nil { fmt.Println(err) } f1, err := os.Open("./main.exe") if err != nil { fmt.Println(err) return } m, err := io.Copy(tw, f1) //将main.exe文件中的信息写入压缩包中 if err != nil { fmt.Println(err) } fmt.Println(m) }运行上面的代码会在当前目录下生成一个 output.tar 文件,如下图所示:
图:生成的 output.tar 文件
package main import ( "archive/tar" "fmt" "io" "os" ) func main() { f, err := os.Open("output.tar") if err != nil { fmt.Println("文件打开失败", err) return } defer f.Close() r := tar.NewReader(f) for hdr, err := r.Next(); err != io.EOF; hdr, err = r.Next() { if err != nil { fmt.Println(err) return } fileinfo := hdr.FileInfo() fmt.Println(fileinfo.Name()) f, err := os.Create("123" + fileinfo.Name()) if err != nil { fmt.Println(err) } defer f.Close() _, err = io.Copy(f, r) if err != nil { fmt.Println(err) } } }运行上面的程序会将 tar 包的文件解压到当前目录中,如下图所示:
图:解压 tar 包
本文链接:http://task.lmcjl.com/news/13018.html