go语言使用pkg的archive的包的练习

src.go

package archive_tar

import (
	"archive/tar"
	"archive/zip"
	"fmt"
	"io"
	"os"
)

type files struct {
	name, content string
}

//写测试
func TarWriteTest() {
	//
	files_ := [2]files{
		{"a.txt", "hello world"},
		{"b.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办"},
	}
	//
	tarf, _ := os.Create("xxx.tar")
	defer tarf.Close()

	tarBufWr := tar.NewWriter(tarf)
	//
	for _, v := range files_ {
		var hdr tar.Header
		hdr.Name = v.name
		hdr.Size = int64(len(v.content))
		hdr.Mode = 0600
		//写文件头
		tarBufWr.WriteHeader(&hdr)
		//写内容
		tarBufWr.Write([]byte(v.content))
		//
	} //
	tarBufWr.Close()
}

//读测试
func TarReadTest() {
	//
	tarf, _ := os.Open("xxx.tar")
	defer tarf.Close()
	//
	tarRd := tar.NewReader(tarf)
	for {
		hdr, err := tarRd.Next()
		if err == io.EOF {
			break
		} //
		fmt.Println(hdr.Size)
		io.Copy(os.Stdout, tarRd)
	}

}

//写zip文件
func ZipWrite() {
	//构造文件
	sampfiles := [3]files{
		{"a.txt", "hello world\r\n"},
		{"b.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办\r\n"},
		{"c.txt", "你好,世界,有很多的文字,很多很多很多,超过了1k那么多,你该怎么办\r\n"},
	}
	//
	f_, _ := os.Create("xxx.zip")
	defer f_.Close()
	//
	zipWr := zip.NewWriter(f_)
	//
	for _, v := range sampfiles {
		//写文件
		zipf, _ := zipWr.Create(v.name)
		zipf.Write([]byte(v.content))
	}
	//必须有
	defer zipWr.Close()
}

//读取zip文件
func ZipRead() {
	//
	zipRd, _ := zip.OpenReader("xxx.zip")
	//遍历文件,获取zip文件内容
	for _, v := range zipRd.File {
		fmt.Println(v.FileHeader.Name)
		f_, _ := v.Open()
		io.Copy(os.Stdout, f_)
	}
}

// func main() {
// 	tarReadTest()
// 	fmt.Println("end")
// }

src_test.go

package archive_tar

import (
	"fmt"
	"testing"
)

func TestTarReadTest(t *testing.T) {
	TarReadTest()
}

func TestTarWriteTest(t *testing.T) {
	fmt.Println("将会看到xxx.tar文件")
	TarWriteTest()
}

func TestZipRead(t *testing.T) {
	ZipRead()
}

func TestZipWrite(t *testing.T) {
	ZipWrite()
}

测试命令
go test -run ^TestZipRead$ .

posted @ 2021-11-01 17:02  iwetuan  阅读(82)  评论(0编辑  收藏  举报