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

How do you change the modified time for a zip file to time.Now()? When I create a zip file I get a modified time of 30 November 1979, 00:00.

So is there an easy way to set the modified time to now?

I found this function which does what I was looking for: func FileInfoHeader(fi os.FileInfo) (*FileHeader, error). This will take an input data file and create a partially filled FileHeader.

I can now use the input file's os.FileInfo for the FileHeader but the compression ratio is almost 1:1...Meaning its hardly compressing the file now. If I don't use CreateHeader then I get a good compression ratio. Does anyone know why? Here's the code I tried..

package main

import (
    "archive/zip"
    "bytes"
    "fmt"
    "os"
    "strings"
)

func main() {
    fmt.Println("Zip Program!

")

    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: %d
", 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())
    }
}