Тип zip.File

Тип zip.File представляет отдельный файл внутри ZIP-архива. Он содержит информацию о файле: его имя, размер, дату модификации, сжатый размер и метод сжатия. Основной метод типа — Open, который возвращает io.ReadCloser для чтения содержимого файла. Для доступа к файлам архива используется поле FileHeader, которое содержит метаданные файла.

Синтаксис

Поле FileHeader содержит информацию о файле. Метод Open открывает файл для чтения.

gotype File struct {
  FileHeader
  // содержит другие скрытые поля
}

func (f *File) Open() (io.ReadCloser, error)

Пример

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

gopackage main

import (
  "archive/zip"
  "fmt"
  "io"
  "log"
  "os"
)

func main() {
  // Открываем ZIP-архив для чтения
  r, err := zip.OpenReader("archive.zip")
  if err != nil {
    log.Fatal(err)
  }
  defer r.Close()

  // Перебираем все файлы в архиве
  for _, f := range r.File {
    // Открываем файл для чтения
    rc, err := f.Open()
    if err != nil {
      log.Fatal(err)
    }
    defer rc.Close()

    // Читаем содержимое файла
    data, err := io.ReadAll(rc)
    if err != nil {
      log.Fatal(err)
    }

    fmt.Printf("Файл: %s, размер: %d байт\n", f.Name, len(data))
  }
}

Результат выполнения кода:

go"Файл: file1.txt, размер: 12 байт"
"Файл: file2.txt, размер: 24 байт"

Пример

Давайте получим информацию о файлах в архиве и выведем их метаданные:

gopackage main

import (
  "archive/zip"
  "fmt"
  "log"
)

func main() {
  // Открываем ZIP-архив для чтения
  r, err := zip.OpenReader("archive.zip")
  if err != nil {
    log.Fatal(err)
  }
  defer r.Close()

  // Выводим информацию о каждом файле
  for _, f := range r.File {
    fmt.Printf("Имя: %s\n", f.Name)
    fmt.Printf("Размер: %d байт\n", f.UncompressedSize64)
    fmt.Printf("Сжатый размер: %d байт\n", f.CompressedSize64)
    fmt.Printf("Метод сжатия: %s\n", f.Method)
    fmt.Println("---")
  }
}

Результат выполнения кода:

go"Имя: document.txt"
"Размер: 1024 байт"
"Сжатый размер: 512 байт"
"Метод сжатия: 8"
"---"
"Имя: image.png"
"Размер: 2048 байт"
"Сжатый размер: 2048 байт"
"Метод сжатия: 0"
"---"

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

  • тип zip.Reader,
    который предоставляет доступ к файлам ZIP-архива
  • тип zip.Writer,
    который используется для создания ZIP-архивов
  • функцию zip.OpenReader,
    которая открывает ZIP-архив для чтения
  • тип zip.FileHeader,
    который содержит метаданные файла в архиве