> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/stdlib/archive.md).

# Архивация

Здесь описаны функции для работы с архивами **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`)
```
