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

Тип tar.Writer

Тип tar.Writer используется для создания tar-архивов. Он предоставляет методы для записи заголовков файлов и их содержимого. Первый параметр - это объект, реализующий интерфейс io.Writer, в который будет производиться запись архива.

Синтаксис

type Writer struct { // содержит скрытые поля } func NewWriter(w io.Writer) *Writer func (tw *Writer) WriteHeader(hdr *Header) error func (tw *Writer) Write(b []byte) (int, error) func (tw *Writer) Close() error

Пример

Создадим tar-архив и запишем в него один файл:

package main import ( "archive/tar" "bytes" "fmt" "log" ) func main() { // Создаем буфер для хранения архива buf := new(bytes.Buffer) // Создаем новый tar.Writer tw := tar.NewWriter(buf) // Создаем заголовок для файла hdr := &tar.Header{ Name: "file.txt", Mode: 0600, Size: int64(len("Hello, World!")), } // Записываем заголовок err := tw.WriteHeader(hdr) if err != nil { log.Fatal(err) } // Записываем содержимое файла _, err = tw.Write([]byte("Hello, World!")) if err != nil { log.Fatal(err) } // Закрываем архив err = tw.Close() if err != nil { log.Fatal(err) } fmt.Println("Archive size:", buf.Len()) }

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

"Archive size: 512"

Пример

Запишем несколько файлов в один tar-архив:

package main import ( "archive/tar" "bytes" "fmt" "log" ) func main() { buf := new(bytes.Buffer) tw := tar.NewWriter(buf) // Создаем первый файл hdr1 := &tar.Header{ Name: "file1.txt", Mode: 0644, Size: int64(len("Content 1")), } err := tw.WriteHeader(hdr1) if err != nil { log.Fatal(err) } _, err = tw.Write([]byte("Content 1")) if err != nil { log.Fatal(err) } // Создаем второй файл hdr2 := &tar.Header{ Name: "file2.txt", Mode: 0644, Size: int64(len("Content 2")), } err = tw.WriteHeader(hdr2) if err != nil { log.Fatal(err) } _, err = tw.Write([]byte("Content 2")) if err != nil { log.Fatal(err) } err = tw.Close() if err != nil { log.Fatal(err) } fmt.Println("Archive contains 2 files, size:", buf.Len()) }

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

"Archive contains 2 files, size: 1024"

Пример

Запишем файл с директорией и вложенным файлом:

package main import ( "archive/tar" "bytes" "fmt" "log" ) func main() { buf := new(bytes.Buffer) tw := tar.NewWriter(buf) // Создаем директорию dirHdr := &tar.Header{ Name: "dir/", Mode: 0755, Typeflag: tar.TypeDir, } err := tw.WriteHeader(dirHdr) if err != nil { log.Fatal(err) } // Создаем файл внутри директории fileHdr := &tar.Header{ Name: "dir/file.txt", Mode: 0644, Size: int64(len("Nested file content")), } err = tw.WriteHeader(fileHdr) if err != nil { log.Fatal(err) } _, err = tw.Write([]byte("Nested file content")) if err != nil { log.Fatal(err) } err = tw.Close() if err != nil { log.Fatal(err) } fmt.Println("Archive with directory and nested file, size:", buf.Len()) }

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

"Archive with directory and nested file, size: 1024"

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

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