中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang 創建壓縮文件

發布時間:2020-08-03 23:38:05 來源:網絡 閱讀:1444 作者:woahjknes 欄目:編程語言
import (
    "os"
    "archive/zip"
    "io"
    "fmt"
    "strings"
)

// ZipFiles compresses one or many files into a single zip archive file.
//壓縮多個文件到一個文件里面
// Param 1: 輸出的zip文件的名字
// Param 2: 需要添加到zip文件里面的文件
//Param 3: 由于file是絕對路徑,打包后可能不是想要的目錄,oldform就是filename中需要被替換的掉的路徑
//Param 4: 要替換成的路徑
func ZipFiles(filename string, files []string, oldform, newform string) error {

    newZipFile, err := os.Create(filename)
    if err != nil {
        return err
    }
    defer newZipFile.Close()

    zipWriter := zip.NewWriter(newZipFile)
    defer zipWriter.Close()

    // 把files添加到zip中
    for _, file := range files {

        zipfile, err := os.Open(file)
        if err != nil {
            return err
        }
        defer zipfile.Close()

        // 獲取file的基礎信息
        info, err := zipfile.Stat()
        if err != nil {
            return err
        }

        header, err := zip.FileInfoHeader(info)
        if err != nil {
            return err
        }

        //使用上面的FileInforHeader() 就可以把文件保存的路徑替換成我們自己想要的了,如下面
        header.Name = strings.Replace(file, oldform, newform, -1)

        // 優化壓縮
        // 更多參考see http://golang.org/pkg/archive/zip/#pkg-constants
        header.Method = zip.Deflate

        writer, err := zipWriter.CreateHeader(header)
        if err != nil {
            return err
        }
        if _, err = io.Copy(writer, zipfile); err != nil {
            return err
        }
    }
    return nil

使用方法 一

func main() {
    fileList := []string{
        "/Users/Jack/Downloads/QQreceiver/72bian_log/anal.txt",
        "/Users/Jack/Downloads/QQreceiver/72bian_log/config.json",
        "/Users/Jack/Downloads/QQreceiver/72bian_log/xzwx_client/md5.txt",
    }
    //保留原來文件的結構
    err := ZipFiles("/Users/Jack/Downloads/QQreceiver/test.zip", fileList, "","")
    if err != nil {
        fmt.Println(err)
    }
}

// 執行之后

//在對應目錄下生成了我們定義的zip文件
?  QQreceiver#  ls test.zip
test.zip
?  QQreceiver#  pwd
/Users/Jack/Downloads/QQreceiver
//解壓test.zip
?  QQreceiver# ls
Users    test.zip
?  QQreceiver# ls -R Users
Jack

Users/Jack:
Downloads

Users/Jack/Downloads:
QQreceiver

Users/Jack/Downloads/QQreceiver:
72bian_log

Users/Jack/Downloads/QQreceiver/72bian_log:
anal.txt    config.json xzwx_client

Users/Jack/Downloads/QQreceiver/72bian_log/xzwx_client:
md5.txt
//可以看到test打包的是文件的絕對路徑,如果這個test.zip是我們要更新的程序的目錄,這樣肯定是不能用的

使用方法 二:
替換成我們想要的結構

func main() {
    fileList := []string{
        "/Users/Jack/Downloads/QQreceiver/72bian_log/anal.txt",
        "/Users/Jack/Downloads/QQreceiver/72bian_log/config.json",
        "/Users/Jack/Downloads/QQreceiver/72bian_log/xzwx_client/md5.txt",
    }
    //比如線上的程序的目錄為game ,"/Users/Jack/Downloads/QQreceiver/72bian_log/"下面的文件為我們線game下的程序文件內容
    err := ZipFiles("/Users/Jack/Downloads/QQreceiver/test.zip", fileList, "/Users/Jack/Downloads/QQreceiver/72bian_log","game/")
    if err != nil {
        fmt.Println(err)
    }
}

執行之后

//在對應目錄下生同樣生成了我們定義的zip文件
?  QQreceiver#  ls test.zip
test.zip
?  QQreceiver#  pwd
/Users/Jack/Downloads/QQreceiver
//解壓test.zip
?  QQreceiver# ls
game     test.zip
?  QQreceiver# ls -R game
anal.txt    config.json xzwx_client

game/xzwx_client:
md5.txt
//上面正好是我們需要的目錄
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴和县| 孝义市| 综艺| 通州区| 南汇区| 台州市| 商河县| 西丰县| 谢通门县| 永顺县| 哈尔滨市| 武定县| 建宁县| 和林格尔县| 霍城县| 潢川县| 洪雅县| 论坛| 陵川县| 财经| 鄂伦春自治旗| 甘洛县| 阿拉善右旗| 房山区| 大丰市| 德州市| 商水县| 中牟县| 宝丰县| 通州市| 苍溪县| 荣昌县| 梁山县| 香河县| 肃南| 彩票| 揭东县| 绍兴县| 南开区| 县级市| 青冈县|