天天看點

go語言使用pkg的archive的包的練習

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")
// }

           
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()
}
           

繼續閱讀