Функция tar.NewWriter
Функция tar.NewWriter создает новый Writer,
который используется для записи TAR-архивов. В качестве
аргумента функция принимает интерфейс io.Writer -
например, файл или буфер, в который будет записан архив.
Возвращает функция указатель на tar.Writer, через
который можно последовательно добавлять файлы в архив.
Синтаксис
tar.NewWriter(w io.Writer) *tar.Writer
Пример
Давайте создадим TAR-архив и запишем в него один файл:
package main
import (
"archive/tar"
"bytes"
"fmt"
"os"
)
func main() {
// Создаем буфер для хранения архива
buf := new(bytes.Buffer)
// Создаем tar.Writer
tw := tar.NewWriter(buf)
defer tw.Close()
// Создаем заголовок для файла
hdr := &tar.Header{
Name: "file.txt",
Mode: 0600,
Size: int64(len("Hello, TAR!")),
}
// Записываем заголовок
if err := tw.WriteHeader(hdr); err != nil {
fmt.Println("Error writing header:", err)
return
}
// Записываем содержимое файла
if _, err := tw.Write([]byte("Hello, TAR!")); err != nil {
fmt.Println("Error writing content:", err)
return
}
// Закрываем writer
tw.Close()
fmt.Printf("Archive size: %d bytes\n", buf.Len())
}
Результат выполнения кода:
"Archive size: 512 bytes"
Пример
Давайте создадим TAR-архив с несколькими файлами:
package main
import (
"archive/tar"
"bytes"
"fmt"
)
func main() {
buf := new(bytes.Buffer)
tw := tar.NewWriter(buf)
defer tw.Close()
// Файл 1
hdr1 := &tar.Header{
Name: "file1.txt",
Mode: 0644,
Size: int64(len("Content 1")),
}
tw.WriteHeader(hdr1)
tw.Write([]byte("Content 1"))
// Файл 2
hdr2 := &tar.Header{
Name: "file2.txt",
Mode: 0644,
Size: int64(len("Content 2")),
}
tw.WriteHeader(hdr2)
tw.Write([]byte("Content 2"))
tw.Close()
fmt.Printf("Archive contains 2 files, size: %d bytes\n", buf.Len())
}
Результат выполнения кода:
"Archive contains 2 files, size: 1024 bytes"
Пример
Давайте создадим TAR-архив и запишем его непосредственно в файл:
package main
import (
"archive/tar"
"fmt"
"os"
)
func main() {
// Создаем файл для архива
f, err := os.Create("archive.tar")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer f.Close()
// Создаем tar.Writer с файлом в качестве io.Writer
tw := tar.NewWriter(f)
defer tw.Close()
// Добавляем файл в архив
hdr := &tar.Header{
Name: "readme.txt",
Mode: 0644,
Size: int64(len("This is a README file")),
}
if err := tw.WriteHeader(hdr); err != nil {
fmt.Println("Error writing header:", err)
return
}
if _, err := tw.Write([]byte("This is a README file")); err != nil {
fmt.Println("Error writing content:", err)
return
}
fmt.Println("Archive created successfully")
}
Результат выполнения кода:
"Archive created successfully"
Смотрите также
-
функцию
tar.NewReader,
которая создает Reader для чтения TAR-архивов -
функцию
tar.Writer.WriteHeader,
которая записывает заголовок файла в архив -
функцию
tar.Writer.Close,
которая закрывает Writer и завершает запись архива -
функцию
archive/zip,
которая предоставляет аналогичный функционал для ZIP-архивов