# Архивация

Здесь описаны функции для работы с архивами **zip** и **tar.gz**.

* [ArchiveName( finfo fi, str root ) str](/stdlib/archive.md#archivename-finfo-fi-str-root-str)
* [CloseTarGz( handle h )](/stdlib/archive.md#closetargz-handle-h)
* [CloseZip( handle h )](/stdlib/archive.md#closezip-handle-h)
* [CreateTarGz( str name ) handle](/stdlib/archive.md#createtargz-str-name-handle)
* [CreateZip( str name ) handle](/stdlib/archive.md#createzip-str-name-handle)
* [CompressFile( handle h, str fname, str packname )](/stdlib/archive.md#compressfile-handle-h-str-fname-str-packname)
* [ReadTarGz( str name ) arr.finfo](/stdlib/archive.md#readtargz-str-name-arr-finfo)
* [ReadZip( str name ) arr.finfo](/stdlib/archive.md#readzip-str-name-arr-finfo)
* [TarGz( str name, str path )](/stdlib/archive.md#targz-str-name-str-path)
* [UnpackTarGz( str name, str path )](/stdlib/archive.md#unpacktargz-str-name-str-path)
* [UnpackTarGz( str name, str path, arr pattern, arr ignore )](/stdlib/archive.md#unpacktargz-str-name-str-path-arr-pattern-arr-ignore)
* [UnpackZip( str name, str path )](/stdlib/archive.md#unpackzip-str-name-str-path)
* [UnpackZip( str name, str path, arr pattern, arr ignore )](/stdlib/archive.md#unpackzip-str-name-str-path-arr-pattern-arr-ignore)
* [Zip( str name, str path )](/stdlib/archive.md#zip-str-name-str-path)

## Функции

### ArchiveName(finfo fi, str root) str

Функция *ArchiveName* объединяет поля *Name* и *Dir* в переменной типа *finfo* и возвращает путь файла для архива относительно корневого пути *root*.

### CloseTarGz(handle h)

Функция *CloseTarGz* заканчивает создание *.tar.gz* архива. Параметр *h* - это идентификатор, который был возвращен функцией **CreateTarGz**.

### CloseZip(handle h)

Функция *CloseZip* заканчивает создание *.zip* архива. Параметр *h* - это идентификатор, который был возвращен функцией **CreateZip**.

### CreateTarGz(str name) handle

Функция *CreateTarGz* начинает создание **.tar.gz** архива с указанным именем. Вы можете добавлять файлы в этот архив с помощью функции **CompressFile**. Функция возвращает идентификатор, который нужно будет закрыть с помощью функции *CloseTarGz*.

### CreateZip(str name) handle

Функция *CreateZip* начинает создание **.zip** архива с указанным именем. Вы можете добавлять файлы в этот архив с помощью функции **CompressFile**. Функция возвращает идентификатор, который нужно будет закрыть с помощью функции *CloseZip*.

### CompressFile(handle h, str fname, str packname)

Функция *CompressFile* добавляет указанный файл *fname* в создаваемый архив. Параметр *packname* содержит относительный путь и имя файла с которым он будет сохранен в архиве. В качестве разделителя нужно использовать символ **/**. Архив предварительно должен быть создан с помощью функций **CreateZip** или **CreateTarGz**.

```go
    handle zip = CreateZip(`my.zip`)
    CompressFile(zip, `../data/my.txt`, `my.txt`)
    CompressFile(zip, `/home/user/folder/copy.txt`, `folder/copy.txt`)
    CloseZip(zip)
```

### ReadTarGz(str name) arr.finfo

Функция *ReadTarGz* возвращает список файлов в указанном **tar.gz** архиве. Поле *Name* содержит имя файла вместе с относительным путем.

```go
   arr.finfo list = ReadTarGz(`my.tar.gz`)
   for fi in list : Println( "\{fi.Name} \{fi.Size}")
```

### ReadZip(str name) arr.finfo

Функция *ReadZip* возвращает список файлов в указанном **zip** архиве. Поле *Name* содержит имя файла вместе с относительным путем.

### TarGz(str name, str path)

Функция *TarGz* упаковывает файл или содержимое директории *path* в **.tar.gz** архив с именем *name*.

```go
   TarGz("/home/user/out/my.tar.gz", `/home/user/docs`)
```

### UnpackTarGz(str name, str path)

Функция *UnpackTarGz* распаковывает **.tar.gz** архив с именем *name* в директорию *path*.

```go
   UnpackTarGz("/home/user/out/my.tar.gz", `/home/user/olddocs`)
```

### UnpackTarGz(str name, str path, arr pattern, arr ignore)

Функция *UnpackTarGz* выборочно распаковывает **.tar.gz** архив с именем *name* в директорию *path*. Массив *pattern* содержит шаблоны файлов, которые необходимо распаковать. Массив *ignore* содержит шаблоны файлов, которые необходимо пропустить. Параметры *pattern* и *ignore* могу быть пустыми массивами. Если шаблон начинается и заканчивается символом **/**, то он обрабатывается как регулярное выражение.

```go
   arr empty
   arr doc = {`*.docx`, `/.txt$/`}
   UnpackTarGz("/home/user/out/my.tar.gz", `/home/user/tmp`, doc, empty )
```

### UnpackZip(str name, str path)

Функция *UnpackZip* распаковывает **.zip** архив с именем *name* в директорию *path*.

```go
   UnpackZip("/home/user/out/my.zip", `/home/user/olddocs`)
```

### UnpackZip(str name, str path, arr pattern, arr ignore)

Функция *UnpackZip* выборочно распаковывает **.zip** архив с именем *name* в директорию *path*. Массив *pattern* содержит шаблоны файлов, которые необходимо распаковать. Массив *ignore* содержит шаблоны файлов, которые необходимо пропустить. Параметры *pattern* и *ignore* могу быть пустыми массивами. Если шаблон начинается и заканчивается символом **/**, то он обрабатывается как регулярное выражение.

```go
   arr empty
   arr skip = {`/temp.pdf/`, `/.txt$/`}
   UnpackZip("/home/user/out/my.tar.gz", `/home/user/tmp`, empty, skip )
```

### Zip(str name, str path)

Функция *Zip* упаковывает файл или содержимое директории *path* в **.zip** архив с именем *name*.

```go
   Zip("/home/user/out/mydoc.zip", `/home/user/docs/important.docx`)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/archive.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
