Функция zip.OpenReader

Функция zip.OpenReader открывает ZIP-архив по указанному пути и возвращает указатель на структуру ReadCloser, которая позволяет читать содержимое архива. В первый параметр функция принимает строку с путем к ZIP-файлу. Возвращаемое значение содержит поле File - список файлов в архиве, и методы для закрытия архива. Функция возвращает ошибку, если не удалось открыть архив или он поврежден.

Синтаксис

gozip.OpenReader(name)

Пример

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

gopackage main

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

func main() {
  r, err := zip.OpenReader("archive.zip")
  if err != nil {
    log.Fatal(err)
  }
  defer r.Close()

  for _, f := range r.File {
    fmt.Println(f.Name)
  }
}

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

go"file1.txt"
"file2.txt"
"folder/file3.txt"

Пример

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

gopackage main

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

func main() {
  r, err := zip.OpenReader("archive.zip")
  if err != nil {
    log.Fatal(err)
  }
  defer r.Close()

  for _, f := range r.File {
    if strings.HasSuffix(f.Name, ".txt") {
      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: %s\n", f.Name, string(data))
    }
  }
}

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

go"file1.txt: Hello World"
"file2.txt: Go programming"

Пример

Давайте обработаем ошибку при попытке открыть несуществующий ZIP-архив:

gopackage main

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

func main() {
  r, err := zip.OpenReader("missing.zip")
  if err != nil {
    log.Printf("Failed to open archive: %v", err)
    return
  }
  defer r.Close()
  fmt.Println("Archive opened successfully")
}

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

go"Failed to open archive: open missing.zip: no such file or directory"

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

  • функцию zip.NewReader,
    которая создает читатель ZIP-архива из байтового потока
  • структуру zip.File,
    которая представляет отдельный файл внутри ZIP-архива
  • метод zip.File.Open,
    который открывает файл для чтения из ZIP-архива
  • функцию zip.NewWriter,
    которая создает писатель для создания ZIP-архива