Golang基礎程式設計 archive zip包

2021-10-07 19:52:24 字數 1763 閱讀 3572

統一使用路徑符 "/", 包含"\"替換為"/"

func tolinux(basepath string) string
引數 1 :  壓縮檔案(目錄)路徑+名

引數2 :   往**寫, 本地壓縮傳檔案變數, 壓縮後將流傳到其它電腦主機使用傳入bytes.buffer  (即包含io.writer介面的結構變數都可)

func zip(fp string, w io.readwriter) error 

header, _ := zip.fileinfoheader(info)

header.name = strings.trimprefix(linuxpath, linuxfilepath + "/")

if info.isdir() else

// 建立:壓縮包頭部資訊

writer, _ := archive.createheader(header)

if !info.isdir()

return nil

}) return nil

}

引數1: 解壓到哪個路徑下

引數2: file/bytes.buffer 等待io.reader介面的結構型別變數

func unzip(basepath string, r io.reader) error 

defer func() ()

_, e = io.copy(f, r)

if nil != e

return unzip(basepath, f)

}func unzip(basepath string, f *os.file) error

os.mkdirall(basepath, 0666) // 確保解壓目錄存在

for _, info := range reader.file

continue

} readcloser, e := info.open()

if nil != e

b, e := ioutil.readall(readcloser)

if nil != e

readcloser.close()

if e := ioutil.writefile(fp, b, info.fileinfo().mode()); nil != e

} return nil

}func main()

defer file.close()

unzip("./hello", file)

bs, e := ioutil.readall(file)

if nil != e

/* 2. 從存放壓縮位元組的buffer資料解壓 */

buffer = bytes.newbuffer(bs)

unzip("./hello1", buffer)

}

解壓的時候報錯 the system cannot find the path specified.

因為使用相對路徑, 導致walk時出現位址不匹配 ./dizhi 跟 dizhi 不匹配 trimprefix沒將位址替換掉

(1) zip函式去掉 if linuxpath == linuxfilepath

按目錄層級進行壓縮

(2) 將絕對路徑轉化成絕對路徑

linuxfilepath := tolinux(fp) => linuxfilepath := toabsolutepath(fp)

參考

Golang併發程式設計基礎

作為併發程式設計乙個基礎硬體知識儲備,首先要說的就是記憶體了,總的來說在絕大多數情況下把記憶體的併發增刪改查模型搞清楚了其他的基本上也是異曲同工之妙。記憶體晶元 即我們所知道的記憶體顆粒,是一堆mos管的集合,在半導體稱呼裡面,很多mos管組成乙個半導體 組module 很多個module組成乙個管...

Golang程式設計基礎 準備篇

golang是google發布的開源程式語言,這裡就不對其進行過多介紹,網上有很多文章已經把它的前身後世都介紹的很清楚了,有興趣的可以去查閱,前幾天剛開始接觸golang的開發,今天抽空在開發之餘對其做一些整理,今天要說的就是golang的基本資料型別。單純的介紹資料型別,沒有任何意義,無非就是幾幾...

Golang 基礎 Go 語言 函式式程式設計

在 go 語言中函式是一等公民,它作為乙個變數 型別 引數 返回值,甚至可以去實現乙個介面,但是 go 語言中函式不支援過載 巢狀和預設引數。package main func main func test functest test fmt.println functest test func p...