Функция zip.NewWriter

Функция zip.NewWriter создает новый объект zip.Writer, который используется для записи файлов в ZIP-архив. В качестве единственного параметра она принимает io.Writer, в который будут записываться сжатые данные. Функция возвращает указатель на zip.Writer, который позволяет добавлять файлы в архив с помощью методов Create или CreateHeader. После завершения работы с архивом необходимо вызвать метод Close для записи завершающей информации архива.

Синтаксис

gozip.NewWriter(w io.Writer) *zip.Writer

Пример

Давайте создадим простой ZIP-архив с одним файлом:

gopackage main

import (
  "archive/zip"
  "os"
)

func main() {
  file, err := os.Create("archive.zip")
  if err != nil {
    panic(err)
  }
  defer file.Close()

  writer := zip.NewWriter(file)
  defer writer.Close()

  f, err := writer.Create("file.txt")
  if err != nil {
    panic(err)
  }

  _, err = f.Write([]byte("Hello, world!"))
  if err != nil {
    panic(err)
  }
}

Пример

Давайте создадим ZIP-архив с несколькими файлами в разных директориях:

gopackage main

import (
  "archive/zip"
  "os"
)

func main() {
  file, err := os.Create("archive.zip")
  if err != nil {
    panic(err)
  }
  defer file.Close()

  writer := zip.NewWriter(file)
  defer writer.Close()

  files := []struct {
    name string
    data string
  }{
    {"dir1/file1.txt", "Content of file 1"},
    {"dir2/file2.txt", "Content of file 2"},
    {"dir2/subdir/file3.txt", "Content of file 3"},
  }

  for _, f := range files {
    w, err := writer.Create(f.name)
    if err != nil {
      panic(err)
    }
    _, err = w.Write([]byte(f.data))
    if err != nil {
      panic(err)
    }
  }
}

Пример

Давайте создадим ZIP-архив с настройками заголовков файлов:

gopackage main

import (
  "archive/zip"
  "os"
  "time"
)

func main() {
  file, err := os.Create("archive.zip")
  if err != nil {
    panic(err)
  }
  defer file.Close()

  writer := zip.NewWriter(file)
  defer writer.Close()

  header := &zip.FileHeader{
    Name:   "file.txt",
    Method:   zip.Deflate,
    Modified: time.Now(),
  }

  w, err := writer.CreateHeader(header)
  if err != nil {
    panic(err)
  }

  _, err = w.Write([]byte("Compressed data"))
  if err != nil {
    panic(err)
  }
}

Смотрите также

  • функцию zip.Writer.Create,
    которая добавляет файл в ZIP-архив по имени
  • функцию zip.Writer.CreateHeader,
    которая добавляет файл с указанным заголовком
  • функцию zip.Writer.Close,
    которая завершает запись ZIP-архива
  • функцию zip.OpenReader,
    которая открывает существующий ZIP-архив для чтения