Golang:Zip 包修改时间默认为 1979 年 11 月 30 日 00:00



如何将 zip 文件的修改时间更改为时间。现在()?当我创建一个zip文件时,我得到的修改时间为1979年11月30日00:00。

那么有没有一种简单的方法可以将修改时间设置为现在?

我找到了这个函数,它做了我一直在寻找的:func FileInfoHeader(fi os.文件信息)(*文件头,错误)。这将采用输入数据文件并创建一个部分填充的 FileHeader。

我现在可以使用输入文件的操作系统。FileHeader 的 FileInfo 但压缩比几乎是 1:1...这意味着它现在几乎不压缩文件。如果我不使用CreateHeader,那么我会得到一个很好的压缩比。有谁知道为什么?这是我尝试过的代码。

package main
import (
    "archive/zip"
    "bytes"
    "fmt"
    "os"
    "strings"
)
func main() {
    fmt.Println("Zip Program!nn")
    zbuf := new(bytes.Buffer)
    fmt.Print("Enter input filename: ")
    var ifilename string
    fmt.Scanf("%s", &ifilename)
    if ifd, err := os.Open(ifilename); err == nil {
        ibuf := make([]byte, 128)
        zwtr := zip.NewWriter(zbuf)
        fi, _ := ifd.Stat()              //call stat() to get os.FileInfo
        fih, _ := zip.FileInfoHeader(fi) //get FileHeader from input file
        if zw, err := zwtr.CreateHeader(fih); err == nil { //use input file header
            for true {
                if ird, err := ifd.Read(ibuf); err == nil {
                    //fmt.Printf("%s", ibuf[:ird])
                    zw.Write(ibuf[:ird])
                } else {
                    ifd.Close()
                    zwtr.Close()
                    break
                }
            }
        } else {
            fmt.Println(err.Error())
        }
    } else {
        fmt.Println(err.Error())
    }
    fmt.Printf("Buf size: %dn", len(zbuf.Bytes()))
    fmt.Print("Enter zip filename: ")
    var zfilename string
    fmt.Scanf("%s", &zfilename)
    if !strings.HasSuffix(zfilename, ".zip") {
        zfilename += ".zip"
    }
    if zfd, err := os.Create(zfilename); err == nil {
        if _, err := zfd.Write(zbuf.Bytes()); err == nil {
        } else {
            fmt.Print(err.Error())
        }
    } else {
        fmt.Println(err.Error())
    }
}

最新更新