РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1341 of 1593 menu

Функция zip.NewReader

Функция zip.NewReader создает новый zip.Reader, который позволяет читать содержимое ZIP архива из переданного байтового среза. В первый параметр функция принимает []byte с данными архива, во второй параметр - размер архива в байтах (тип int64). Функция возвращает указатель на zip.Reader и ошибку, если архив поврежден или имеет неверный формат.

Синтаксис

zip.NewReader(data []byte, size int64) (*zip.Reader, error)

Пример

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

package main import ( "archive/zip" "fmt" "log" ) func main() { zipData := []byte{80, 75, 3, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 75, 1, 2, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} size := int64(len(zipData)) r, err := zip.NewReader(zipData, size) if err != nil { log.Fatal(err) } for _, f := range r.File { fmt.Println(f.Name) } }

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

"file1.txt" "file2.txt"

Пример

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

package main import ( "archive/zip" "fmt" "io" "log" ) func main() { zipData := []byte{80, 75, 3, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 75, 1, 2, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} size := int64(len(zipData)) r, err := zip.NewReader(zipData, size) if err != nil { log.Fatal(err) } firstFile := r.File[0] rc, err := firstFile.Open() if err != nil { log.Fatal(err) } defer rc.Close() content, err := io.ReadAll(rc) if err != nil { log.Fatal(err) } fmt.Printf("%s: %s", firstFile.Name, content) }

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

"file1.txt: Hello, World!"

Пример

Давайте обработаем ошибку при попытке чтения поврежденного ZIP архива:

package main import ( "archive/zip" "fmt" "log" ) func main() { invalidData := []byte{0, 1, 2, 3, 4, 5} size := int64(len(invalidData)) r, err := zip.NewReader(invalidData, size) if err != nil { log.Printf("Error: %v", err) return } fmt.Printf("Files: %d", len(r.File)) }

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

"Error: zip: not a valid zip file"

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

  • функцию zip.OpenReader,
    которая открывает ZIP архив из файла для чтения
  • тип zip.Reader,
    который используется для чтения содержимого ZIP архива
  • тип zip.File,
    который представляет отдельный файл внутри ZIP архива
  • функцию zip.NewWriter,
    которая создает новый zip.Writer для записи ZIP архива
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить