Тип tar.Header
Тип tar.Header представляет собой структуру,
хранящую метаданные заголовка файла в tar-архиве.
Он используется при записи файлов в архив с помощью
tar.Writer и при чтении файлов из архива
с помощью tar.Reader. Структура содержит
поля для имени файла, его размера, прав доступа,
времени модификации, типа файла и других атрибутов.
Синтаксис
type Header struct {
Name string
Mode int64
Uid int
Gid int
Size int64
ModTime time.Time
Typeflag byte
Linkname string
Uname string
Gname string
Devmajor int64
Devminor int64
AccessTime time.Time
ChangeTime time.Time
Xattrs map[string]string
}
Пример
Создадим заголовок для файла и запишем его в tar-архив:
package main
import (
"archive/tar"
"bytes"
"fmt"
"os"
"time"
)
func main() {
var buf bytes.Buffer
tw := tar.NewWriter(&buf)
header := &tar.Header{
Name: "example.txt",
Mode: 0644,
Size: 11,
ModTime: time.Now(),
Uid: os.Getuid(),
Gid: os.Getgid(),
}
err := tw.WriteHeader(header)
if err != nil {
fmt.Println("Error writing header:", err)
return
}
content := []byte("hello world")
_, err = tw.Write(content)
if err != nil {
fmt.Println("Error writing content:", err)
return
}
tw.Close()
fmt.Println("Archive created successfully")
}
Результат выполнения кода:
"Archive created successfully"
Пример
Прочитаем заголовки файлов из существующего tar-архива:
package main
import (
"archive/tar"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("example.tar")
if err != nil {
fmt.Println("Error opening archive:", err)
return
}
defer file.Close()
tr := tar.NewReader(file)
for {
header, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("Error reading header:", err)
return
}
fmt.Printf("Name: %s, Size: %d, Mode: %04o\n",
header.Name, header.Size, header.Mode)
}
}
Результат выполнения кода (пример вывода):
"Name: example.txt, Size: 11, Mode: 0644"
"Name: another.txt, Size: 20, Mode: 0644"
Пример
Создадим заголовок для директории с установкой прав доступа:
package main
import (
"archive/tar"
"bytes"
"fmt"
"time"
)
func main() {
var buf bytes.Buffer
tw := tar.NewWriter(&buf)
header := &tar.Header{
Name: "mydir/",
Mode: 0755,
Typeflag: tar.TypeDir,
ModTime: time.Now(),
Uid: 1000,
Gid: 1000,
Uname: "user",
Gname: "group",
}
err := tw.WriteHeader(header)
if err != nil {
fmt.Println("Error writing header:", err)
return
}
tw.Close()
fmt.Println("Directory header created successfully")
}
Результат выполнения кода:
"Directory header created successfully"
Смотрите также
-
тип
tar.Reader,
который позволяет читать файлы из tar-архива -
тип
tar.Writer,
который позволяет записывать файлы в tar-архив -
функцию
tar.NewReader,
которая создает новый Reader для чтения архива -
функцию
tar.NewWriter,
которая создает новый Writer для записи архива