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