如何将zip文件的修改时间更改为time.Now()?当我创建一个zip文件时,我的修改时间是1979年11月30日00:00。
那么有一种简单的方法可以将修改时间设置为现在吗?
答案 0 :(得分:0)
我发现这个函数可以完成我想要的:func FileInfoHeader(fi os.FileInfo)(* FileHeader,error)。这将获取输入数据文件并创建部分填充的FileHeader。
答案 1 :(得分:0)
我现在可以使用输入文件的os.FileInfo作为FileHeader,但压缩率几乎是1:1 ......这意味着它现在几乎不压缩文件。如果我不使用CreateHeader,那么我获得了良好的压缩比。有谁知道为什么?这是我试过的代码..
package main
import (
"archive/zip"
"bytes"
"fmt"
"os"
"strings"
)
func main() {
fmt.Println("Zip Program!\n\n")
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\n", 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())
}
}