> 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/file.md).

# Файлы

Ниже описаны функции для работы с файлами и директориями.

* [AppendFile( str filename, buf | str data )](/stdlib/file.md#appendfile-str-filename-buf-or-str-data)
* [ChDir( str dirname )](/stdlib/file.md#chdir-str-dirname)
* [ChMode( str name, int mode )](/stdlib/file.md#chmode-str-name-int-mode)
* [CloseFile( file f )](/stdlib/file.md#closefile-file-f)
* [CopyFile( str src, str dest ) int](/stdlib/file.md#copyfile-str-src-str-dest-int)
* [CreateDir( str dirname )](/stdlib/file.md#createdir-str-dirname)
* [CreateFile( str name, bool trunc )](/stdlib/file.md#createfile-str-name-bool-trunc)
* [ExistFile( str name ) bool](/stdlib/file.md#existfile-str-name-bool)
* [FileInfo( file f ) finfo](/stdlib/file.md#fileinfo-file-f-finfo)
* [FileInfo( str name ) finfo](/stdlib/file.md#fileinfo-str-name-finfo)
* [FileMode( str name ) int](/stdlib/file.md#filemode-str-name-int)
* [GetCurDir() str](/stdlib/file.md#getcurdir-str)
* [IsEmptyDir( str path ) bool](/stdlib/file.md#isemptydir-str-path-bool)
* [Md5File( str filename ) str](/stdlib/file.md#md-5-file-str-filename-str)
* [obj( finfo fi ) obj](/stdlib/file.md#obj-finfo-fi-obj)
* [OpenFile( str filename, int flags ) file](/stdlib/file.md#openfile-str-filename-int-flags-file)
* [Read( file f, int size ) buf](/stdlib/file.md#read-file-f-int-size-buf)
* [ReadDir( str dirname ) arr.finfo](/stdlib/file.md#readdir-str-dirname-arr-finfo)
* [ReadDir( str dirname, int flags, str pattern ) arr.finfo](/stdlib/file.md#readdir-str-dirname-int-flags-str-pattern-arr-finfo)
* [ReadDir( str dirname, int flags, arr.str patterns, arr.str ignore ) arr.finfo](/stdlib/file.md#readdir-str-dirname-int-flags-arr-str-patterns-arr-str-ignore-arr-finfo)
* [ReadFile( str filename ) str](/stdlib/file.md#readfile-str-filename-str)
* [ReadFile( str filename, buf out ) buf](/stdlib/file.md#readfile-str-filename-buf-out-buf)
* [ReadFile( str filename, int offset, int length ) buf](/stdlib/file.md#readfile-str-filename-int-offset-int-length-buf)
* [Remove( str name )](/stdlib/file.md#remove-str-name)
* [RemoveDir( str dirname )](/stdlib/file.md#removedir-str-dirname)
* [Rename( str oldpath, str newpath )](/stdlib/file.md#rename-str-oldpath-str-newpath)
* [SetFileTime( str name, time modtime )](/stdlib/file.md#setfiletime-str-name-time-modtime)
* [SetPos( file f, int off, int whence ) int](/stdlib/file.md#setpos-file-f-int-off-int-whence-int)
* [Sha256File( str filename ) str](/stdlib/file.md#sha-256-file-str-filename-str)
* [TempDir() str](/stdlib/file.md#tempdir-str)
* [TempDir( str path, str prefix ) str](/stdlib/file.md#tempdir-str-path-str-prefix-str)
* [Write( file f, buf b ) file](/stdlib/file.md#write-file-f-buf-b-file)
* [WriteFile( str filename, buf | str data )](/stdlib/file.md#writefile-str-filename-buf-or-str-data)

## Типы

### finfo

Тип *finfo* используется для получения информации о файле и имеет следующие поля:

* **str Name** - имя файла
* **int Size** - размер файла в байтах
* **int Mode** - флаги файла и разрешения
* **time Time** - время последнего изменения
* **bool IsDir** - true, если это директория
* **str Dir** - директория, где расположен файл. Данное поле заполняется только при вызове функции [ReadDir(str, int, str)](/stdlib/file.md#readdir-str-dirname-int-flags-str-pattern-arr-finfo).

### file

Тип *file* используется в функциях, которые работают с дескриптором открытого файла.

## Функции

### AppendFile(str filename, buf|str data)

Функция *AppendFile* добавляет данные переменной типа *buf* или *str* в конец файла *filename*. Если файл не существует, то *AppendFile* создает его с правами 0644.

### ChDir(str dirname)

Функция *ChDir* изменяет текущую директорию.

### ChMode(str name, int mode)

Функция *ChMode* изменяет атрибуты файла.

### CloseFile(file f)

Функция *CloseFile* закрывает дескриптор файла, который был открыт с помощью функции **OpenFile**.

### CopyFile(str src, str dest) int

Функция *CopyFile* копирует файл *src* в файл *dest*. Если файл *dest* существует, то он будет перезаписан. При копировании сохраняются атрибуты файла. Функция возвращает количество скопированных байт.

### CreateDir(str dirname)

Функция *CreateDir* создает директорию с именем *dirname*, включая все необходимые родительские директории. Если *dirname* уже существующая директория, то *CreateDir* ничего не делает.

### CreateFile(str name, bool trunc)

Функция *CreateFile* создает файл с указанным именем. Если параметр *trunc* равен *true* и файл уже существует, то в этом случае его размер станет 0.

### ExistFile(str name) bool

Функция *ExistFile* возвращает *true*, если указанный файл или директория существует. В противном случае, возвращается *false*.

### FileInfo(file f) finfo

Функция *FileInfo* получает информацию об указанном файле и возвращает структуру *finfo*. Файл должен быть октрыт с помощью функции **OpenFile**.

### FileInfo(str name) finfo

Функция *FileInfo* получает информацию об указанном файле и возвращает структуру *finfo*.

### FileMode(str name) int

Функция *FileMode* возвращает атрибуты файла.

### GetCurDir() str

Функция *GetCurDir* возвращает текущую директорию.

### IsEmptyDir(str path) bool

Функция *IsEmptyDir* возвращает *true*, если указанная директория пустая. В противном случае, возвращается *false*.

### Md5File(str filename) str

Функция *Md5File* возвращает MD5 хэш указанного файла в виде шестнадцатеричной строки.

### obj(finfo fi) obj

Функция *obj* конвертирует переменную типа finfo в объект. Полученный объект имеет поля: *name, size, mode, time, isdir, dir*.

### OpenFile(str filename, int flags) file

Функция *OpenFile* открывает указанный файл и возвращает переменную типа *file* с дескриптором открытого файла. После работы с файлом дескриптор открытого файла должен быть закрыт с помощью функции **CloseFile**. Параметр *flags* может быть нулем или комбинацией следующих флагов:

* *CREATE* - если файл не существует, то он будет создан.
* *TRUNC* - файл будет обрезан до нулевой длины после открытия.
* *READONLY* - файл будет открыт только для чтения.

```go
    file f = OpenFile(fname, CREATE)
    Write(f, buf("some test string"))
    SetPos(f, -15, 1)
    buf b &= Read(f, 5)
    CloseFile(f)
```

### Read(file f, int size) buf

Функция *Read* читает *size* количество байт с текущей позиции в файле, который был открыт с помощью функции **OpenFile**. Функция возвращает переменную типа *buf*, которая содержит прочитанные данные.

### ReadDir(str dirname) arr.finfo

Функция *ReadDir* читает директорию с указанным именем и возвращает список её поддиректорий и файлов.

### ReadDir(str dirname, int flags, str pattern) arr.finfo

Функция *ReadDir* читает директорию *dirname* с указанным именем и возвращает список её поддиректорий и файлов в соотвествии с указанными параметрами. Параметр *flags* может быть комбинацией следующих флагов:

* **RECURSIVE** - В этом случае будет рекурсивный поиск по всем поддиректориям.
* **ONLYFILES** - Возвращаемый массив будет содержать только файлы.
* **ONLYDIRS** - Возвращаемый массив будет содержать только директории.
* **REGEXP** - Параметр *pattern* содержит регулярное выражения для сравнения имён файлов.

Если вы укажете одновременно флаги **ONLYFILES** и **ONLYDIRS**, то будут искаться файлы и директории.

Параметр *pattern* может содержать маску для файлов или регулярное выражение. В этом случае, будут возвращаться файлы и директории, которые соответствуют указанному шаблону. Маска может содержать следующие символы:

* '\*' - любая последовательность, кроме символа разделителя
* '?' - любой одиночный символ, кроме символа разделителя

```go
for item in ReadDir(ftemp, RECURSIVE, `*fold*`) {
    ret += item.Name
}
for item in ReadDir(ftemp, RECURSIVE | ONLYFILES | REGEXP, `.*\.pdf`) {
    ret += item.Name
}
```

### ReadDir(str dirname, int flags, arr.str patterns, arr.str ignore) arr.finfo

Функция *ReadDir* читает директорию *dirname* с указанным именем и возвращает список её поддиректорий и файлов в соотвествии с указанными параметрами. Параметр *flags* описан выше. Параметр *patterns* является массивом строк и может содержать маски для файлов или регулярные выражения. Параметр *ignore* также содержит маски для файлов или регулярные выражения, но такие файлы или директории будут пропускаться. Если вы хотите указать в этих массивах регулярное выражение, то заключите его между символами **'/'**.

```go
arr.str aignore = {`/txt/`, `*.pak`}
arr.str amatch = {`/\d+/`, `*.p??`, `/di/`}
for item in ReadDir(ftemp, RECURSIVE, amatch, aignore) {
    ret += item.Name
}
```

### ReadFile(str filename) str

Функция *ReadFile* читает указанный файл и возвращает его содержимое в виде строки.

### ReadFile(str filename, buf out) buf

Функция *ReadFile* читает файл *filename* в переменную *out* типа *buf* и возвращает эту переменную.

### ReadFile(str filename, int offset, int length) buf

Функция *ReadFile* читает данные из файла *filename* начиная со смещения *offset* и длиной *length*. Если *offset* меньше нуля, то смещение считается от конца к началу файла.

### Remove(str name)

Функция *Remove* удаляет файл или пустую директорию.

### RemoveDir(str dirname)

Функция *RemoveDir* удаляет директорию *dirname* включая всё её содержимое.

### Rename(str oldpath, str newpath)

Функция *Rename* переименовывает (переносит) *oldpath* в *newpath*. Если *newpath* уже существует и является файлом, то *Rename* заменяет его.

### SetFileTime(str name, time modtime)

Функция *SetFileTime* изменяет время последней записи у указанного файла.

### SetPos(file f, int off, int whence) int

Функция *SetPos* устанавливает в файле текущую позицию для операций чтения или записи. Файл должен быть открыт с помощью функции **OpenFile**. Функция возвращает смещение новой позиции. Параметр *whence* может принимать следующие значения:

* *0* - смещение *off* указано от начало файла.
* *1* - смещение *off* указано от текущей позиции.
* *2* - смещение *off* указано от конца файла.

### Sha256File(str filename) str

Функция *Sha256File* возвращает SHA256 хэш указанного файла в виде шестнадцатеричной строки.

### TempDir() str

Функция *TempDir* возвращает временную директорию по умолчанию.

### TempDir(str path, str prefix) str

Функция *TempDir* создает новую временную директорию в директории *path* с именем, начинающемся на *prefix* и возвращает полное имя этой новой директории. Если *path* пустая строка, *TempDir* использует временную директорию по умолчанию.

### Write(file f, buf b) file

Функция *Write* записывает данные из переменной типа *buf* в файл, который был открыт с помощью функции **OpenFile**. Функция возвращает параметр *f*.

### WriteFile(str filename, buf|str data)

Функция *WriteFile* записывает данные из переменной типа *buf* или строки в файл *filename*. Если файл не существует, то он будет создан с разрешениями 0777, в противном случае, файл будет перезаписан заново.
