Метод zip.Writer.Close
Метод zip.Writer.Close завершает процесс создания ZIP-архива.
Он записывает центральный директорий (центральную структуру каталога),
которая содержит информацию о всех файлах в архиве, и закрывает
базовый писатель. Вызов этого метода обязателен для получения
корректного ZIP-файла, так как без него архив будет неполным
и не сможет быть открыт стандартными архиваторами.
Метод возвращает ошибку, если при записи директория произошла
какая-либо проблема.
Синтаксис
func (w *zip.Writer) Close() error
Пример
Давайте создадим простой ZIP-архив с одним текстовым файлом
и закроем его с помощью zip.Writer.Close:
package main
import (
"archive/zip"
"bytes"
"fmt"
"log"
)
func main() {
buf := new(bytes.Buffer)
zipWriter := zip.NewWriter(buf)
fileWriter, err := zipWriter.Create("file.txt")
if err != nil {
log.Fatal(err)
}
_, err = fileWriter.Write([]byte("Hello, World!"))
if err != nil {
log.Fatal(err)
}
err = zipWriter.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("ZIP archive size: %d bytes", buf.Len())
}
Результат выполнения кода:
"ZIP archive size: 86 bytes"
Пример
Давайте создадим архив с несколькими файлами и посмотрим на результат закрытия архива:
package main
import (
"archive/zip"
"bytes"
"fmt"
"log"
)
func main() {
buf := new(bytes.Buffer)
zipWriter := zip.NewWriter(buf)
files := []struct {
name string
content string
}{
{"file1.txt", "First file content"},
{"file2.txt", "Second file content"},
{"folder/file3.txt", "Third file content"},
}
for _, f := range files {
w, err := zipWriter.Create(f.name)
if err != nil {
log.Fatal(err)
}
_, err = w.Write([]byte(f.content))
if err != nil {
log.Fatal(err)
}
}
err := zipWriter.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Archive contains %d files", len(files))
}
Результат выполнения кода:
"Archive contains 3 files"
Пример
Давайте рассмотрим случай, когда нужно закрыть архив с обработкой ошибки, которая может возникнуть при записи центрального директория:
package main
import (
"archive/zip"
"bytes"
"fmt"
"log"
)
func main() {
buf := new(bytes.Buffer)
zipWriter := zip.NewWriter(buf)
w, err := zipWriter.Create("example.txt")
if err != nil {
log.Fatal(err)
}
_, err = w.Write([]byte("Some data"))
if err != nil {
log.Fatal(err)
}
if err := zipWriter.Close(); err != nil {
log.Printf("Failed to close archive: %v", err)
} else {
fmt.Println("Archive closed successfully")
}
}
Результат выполнения кода:
"Archive closed successfully"
Смотрите также
-
функцию
zip.NewWriter,
которая создает новый объект для записи ZIP-архива -
метод
zip.Writer.Create,
который добавляет новый файл в архив -
метод
zip.Writer.CreateHeader,
который добавляет файл с настраиваемым заголовком -
структуру
zip.Writer,
которая предоставляет функциональность для записи ZIP-архивов