Метод zip.Writer.CreateHeader
Метод zip.Writer.CreateHeader создает новый файл внутри ZIP-архива
с заданным заголовком. В отличие от метода Create, этот метод
позволяет полностью контролировать метаданные файла, такие как
время модификации, режим доступа, метод сжатия и другие параметры.
В качестве единственного параметра метод принимает указатель на
структуру zip.FileHeader, которая содержит всю информацию о файле.
Метод возвращает объект io.Writer, в который можно записывать
содержимое файла.
Синтаксис
func (w *zip.Writer) CreateHeader(fh *zip.FileHeader) (io.Writer, error)
Пример
Давайте создадим ZIP-архив и добавим в него файл с настраиваемым заголовком, указав имя файла и время модификации:
package main
import (
"archive/zip"
"os"
"time"
)
func main() {
file, err := os.Create("archive.zip")
if err != nil {
panic(err)
}
defer file.Close()
zipWriter := zip.NewWriter(file)
defer zipWriter.Close()
header := &zip.FileHeader{
Name: "file.txt",
Modified: time.Now(),
}
writer, err := zipWriter.CreateHeader(header)
if err != nil {
panic(err)
}
writer.Write([]byte("Hello, World!"))
}
Пример
Давайте создадим ZIP-архив и добавим в него файл с указанием метода
сжатия Deflate и установкой прав доступа только для чтения:
package main
import (
"archive/zip"
"os"
"time"
)
func main() {
file, err := os.Create("secure.zip")
if err != nil {
panic(err)
}
defer file.Close()
zipWriter := zip.NewWriter(file)
defer zipWriter.Close()
header := &zip.FileHeader{
Name: "data.txt",
Method: zip.Deflate,
Modified: time.Now(),
}
header.SetMode(0444)
writer, err := zipWriter.CreateHeader(header)
if err != nil {
panic(err)
}
writer.Write([]byte("Secret data"))
}
Пример
Давайте создадим ZIP-архив с несколькими файлами, используя разные заголовки для каждого из них:
package main
import (
"archive/zip"
"os"
"time"
)
func main() {
file, err := os.Create("files.zip")
if err != nil {
panic(err)
}
defer file.Close()
zipWriter := zip.NewWriter(file)
defer zipWriter.Close()
files := []struct {
name string
content string
mode os.FileMode
}{
{"readme.txt", "Readme content", 0644},
{"secret.log", "Log data", 0600},
{"public.log", "Public log", 0644},
}
for _, f := range files {
header := &zip.FileHeader{
Name: f.name,
Method: zip.Deflate,
Modified: time.Now(),
}
header.SetMode(f.mode)
writer, err := zipWriter.CreateHeader(header)
if err != nil {
panic(err)
}
writer.Write([]byte(f.content))
}
}
Смотрите также
-
метод
zip.Writer.Create,
который создает файл в ZIP-архиве с автоматическим заполнением заголовка -
метод
zip.Writer.Close,
который завершает запись ZIP-архива и закрывает его -
структуру
zip.FileHeader,
которая содержит метаданные файла в ZIP-архиве -
функцию
zip.NewWriter,
которая создает новый объект для записи ZIP-архива