zipファイルの変更時刻をtime.Now()に変更するにはどうすればよいですか? zipファイルを作成すると、1979年11月30日00:00の修正時刻が取得されます。Golang:Zip Package Modified Timeデフォルトは1979年11月30日00:00
変更した時刻を今すぐ簡単に設定できますか?
zipファイルの変更時刻をtime.Now()に変更するにはどうすればよいですか? zipファイルを作成すると、1979年11月30日00:00の修正時刻が取得されます。Golang:Zip Package Modified Timeデフォルトは1979年11月30日00:00
変更した時刻を今すぐ簡単に設定できますか?
私が探していたこの機能が見つかりました:func FileInfoHeader(fi os.FileInfo)(* FileHeader、error)。これにより、入力データファイルが取得され、部分的にいっぱいのFileHeaderが作成されます。
入力ファイルの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())
}
}
https://golang.org/pkg/archive/zip/#FileHeader.ModTimeまたはファイルヘッダーを使用する必要があります。あなたが使っているコードは何ですか? – khrm
@khrm:基本的にFileHeaderを作成し、それに必要な値を入力してCreateHeaderに渡しますか? FileHeader変数に圧縮されているファイルから(一度に1つの要素をコピーする以外に)値をコピーする方法があるかどうかは疑問です... – G4143
コードスニペットを共有できますか? – khrm