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

Метод tar.Writer.Close

Метод tar.Writer.Close завершает процесс записи TAR-архива. Он записывает два нулевых блока в конец архива, что является обязательным требованием формата TAR для обозначения конца архива. Также этот метод закрывает связанный с архиватором io.Writer, если он реализует интерфейс io.Closer. Метод возвращает ошибку, если в процессе записи финальных блоков возникли проблемы.

Синтаксис

err := writer.Close()

Пример

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

package main import ( "archive/tar" "bytes" "fmt" ) func main() { var buf bytes.Buffer tw := tar.NewWriter(&buf) hdr := &tar.Header{ Name: "file.txt", Mode: 0600, Size: 5, } err := tw.WriteHeader(hdr) if err != nil { fmt.Println("WriteHeader error:", err) return } _, err = tw.Write([]byte("hello")) if err != nil { fmt.Println("Write error:", err) return } err = tw.Close() if err != nil { fmt.Println("Close error:", err) return } fmt.Println("Archive size:", buf.Len()) }

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

"Archive size: 1536"

Пример

Метод Close обязательно должен быть вызван, иначе архив будет невалидным. Если не вызвать Close, финальные нулевые блоки не будут записаны:

package main import ( "archive/tar" "bytes" "fmt" ) func main() { var buf bytes.Buffer tw := tar.NewWriter(&buf) hdr := &tar.Header{ Name: "file.txt", Mode: 0600, Size: 3, } tw.WriteHeader(hdr) tw.Write([]byte("foo")) // Close не вызывается fmt.Println("Archive size:", buf.Len()) }

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

"Archive size: 1024"

Валидный архив должен заканчиваться двумя нулевыми блоками, поэтому при работе с TAR всегда следует закрывать архиватор.

Пример

При возникновении ошибки в процессе записи финальных блоков, метод Close вернет ошибку:

package main import ( "archive/tar" "errors" "fmt" "io" ) type errorWriter struct{} func (ew errorWriter) Write(p []byte) (int, error) { return 0, errors.New("write error") } func main() { tw := tar.NewWriter(errorWriter{}) hdr := &tar.Header{ Name: "file.txt", Mode: 0600, Size: 4, } tw.WriteHeader(hdr) tw.Write([]byte("test")) err := tw.Close() if err != nil { fmt.Println("Close error:", err) } }

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

"Close error: write error"

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

  • метод tar.Writer.WriteHeader,
    который записывает заголовок файла в архив
  • функцию tar.NewWriter,
    которая создает новый архиватор TAR
  • структуру tar.Reader,
    которая используется для чтения TAR-архивов
  • структуру tar.Header,
    которая описывает метаданные файла в архиве
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить