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 文件,如下图所示:
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 包的文件解压到当前目录中,如下图所示:
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有