Spec-Zone.ru › Deno 2

fs/promises

API fs/promises предоставляет асинхронные методы файловой системы, возвращающие промисы.

API промисов использует пул потоков Node.js для выполнения операций с файловой системой вне потока цикла событий. Эти операции не синхронизированы и не являются потокобезопасными. При одновременном выполнении нескольких изменений одного и того же файла следует соблюдать осторожность, иначе может произойти повреждение данных.

Использование в Deno

import * as mod from "node:fs/promises";

функция access

Использование в Deno

import { access } from "node:fs/promises";
access(
path: PathLike,
mode?: number,
): Promise<void>

Проверяет разрешения пользователя для файла или каталога, указанного в path. Аргумент mode — необязательное целое число, задающее проверки доступности, которые необходимо выполнить. mode должен быть либо значением fs.constants.F_OK, либо маской, состоящей из побитового ИЛИ любых значений из fs.constants.R_OK, fs.constants.W_OK и fs.constants.X_OK (например, fs.constants.W_OK | fs.constants.R_OK). Возможные значения mode см. в File access constants.

Если проверка доступности выполнена успешно, промис выполняется без значения. Если какая-либо из проверок доступности завершается неудачей, промис отклоняется с объектом Error. В следующем примере проверяется, можно ли прочитать файл/etc/passwd и записать в него данные из текущего процесса.

import { access, constants } from 'node:fs/promises';

try {
  await access('/etc/passwd', constants.R_OK | constants.W_OK);
  console.log('can access');
} catch {
  console.error('cannot access');
}

Не рекомендуется использовать fsPromises.access() для проверки доступности файла перед вызовом fsPromises.open(). Это приводит к состоянию гонки, поскольку другие процессы могут изменить состояние файла между двумя вызовами. Вместо этого пользовательский код должен напрямую открывать, читать и записывать файл, а также обрабатывать ошибку, возникающую, если файл недоступен.

Параметры

path: PathLike
mode: number = fs.constants.F_OK
необязательный

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция appendFile

Использование в Deno

import { appendFile } from "node:fs/promises";
appendFile(
path: PathLike | FileHandle,
data: string | Uint8Array,
options?:
(
ObjectEncodingOptions
& FlagAndOpenMode
& { flush?: boolean | undefined; }
)

| BufferEncoding
| null
,
): Promise<void>

Асинхронно добавляет данные в файл, создавая его, если он ещё не существует. data может быть строкой или Buffer.

Если options является строкой, она задаёт encoding.

Параметр mode влияет только на вновь созданный файл. Подробнее см. в fs.open().

В качестве path можно указать FileHandle, открытый для добавления данных (с помощью fsPromises.open()).

Параметры

path: PathLike | FileHandle

имя файла или {FileHandle}

data: string | Uint8Array
options:
(
ObjectEncodingOptions
& FlagAndOpenMode
& { flush?: boolean | undefined; }
)

| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция chmod

Использование в Deno

import { chmod } from "node:fs/promises";
chmod(
path: PathLike,
mode: Mode,
): Promise<void>

Изменяет права доступа к файлу.

Параметры

path: PathLike
mode: Mode

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция chown

Использование в Deno

import { chown } from "node:fs/promises";
chown(
path: PathLike,
uid: number,
gid: number,
): Promise<void>

Изменяет владельца файла.

Параметры

path: PathLike
uid: number
gid: number

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция copyFile

Использование в Deno

import { copyFile } from "node:fs/promises";
copyFile(
src: PathLike,
dest: PathLike,
mode?: number,
): Promise<void>

Асинхронно копирует src в dest. По умолчанию, если dest уже существует, он перезаписывается.

Атомарность операции копирования не гарантируется. Если после открытия целевого файла для записи произойдёт ошибка, будет предпринята попытка удалить целевой файл.

import { copyFile, constants } from 'node:fs/promises';

try {
  await copyFile('source.txt', 'destination.txt');
  console.log('source.txt was copied to destination.txt');
} catch {
  console.error('The file could not be copied');
}

// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
try {
  await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
  console.log('source.txt was copied to destination.txt');
} catch {
  console.error('The file could not be copied');
}

Параметры

src: PathLike

имя исходного файла для копирования

dest: PathLike

имя целевого файла для операции копирования

mode: number = 0
необязательный

Необязательные модификаторы, задающие поведение операции копирования. Можно создать маску, состоящую из побитового ИЛИ двух или более значений (например, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE)

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция cp

нестабильный

Использование в Deno

import { cp } from "node:fs/promises";
cp(
source: string | URL,
destination: string | URL,
opts?: CopyOptions,
): Promise<void>

Асинхронно копирует всю структуру каталогов из src в dest, включая подкаталоги и файлы.

При копировании каталога в другой каталог шаблоны glob не поддерживаются, а поведение аналогично cp dir1/ dir2/.

Параметры

source: string | URL
destination: string | URL
opts: CopyOptions
необязательный

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция glob

Использование в Deno

import { glob } from "node:fs/promises";

Вариант 1

glob(pattern: string | string[]): AsyncIterator<string>

Возвращает файлы, соответствующие указанному шаблону.

Параметры

pattern: string | string[]

Тип возвращаемого значения

AsyncIterator<string>

Вариант 2

glob(
pattern: string | string[],
opt: GlobOptionsWithFileTypes,
): AsyncIterator<Dirent>

Параметры

pattern: string | string[]
opt: GlobOptionsWithFileTypes

Тип возвращаемого значения

AsyncIterator<Dirent>

Вариант 3

glob(
pattern: string | string[],
opt: GlobOptionsWithoutFileTypes,
): AsyncIterator<string>

Параметры

pattern: string | string[]
opt: GlobOptionsWithoutFileTypes

Тип возвращаемого значения

AsyncIterator<string>

Вариант 4

glob(
pattern: string | string[],
opt: GlobOptions,
): AsyncIterator<Dirent | string>

Параметры

pattern: string | string[]
opt: GlobOptions

Тип возвращаемого значения

AsyncIterator<Dirent | string>

функция lchown

Использование в Deno

import { lchown } from "node:fs/promises";
lchown(
path: PathLike,
uid: number,
gid: number,
): Promise<void>

Изменяет владельца символической ссылки.

Параметры

path: PathLike
uid: number
gid: number

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция link

Использование в Deno

import { link } from "node:fs/promises";
link(
existingPath: PathLike,
newPath: PathLike,
): Promise<void>

Создаёт новую ссылку с existingPath на newPath. Дополнительные сведения см. в документации POSIX link(2).

Параметры

existingPath: PathLike
newPath: PathLike

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция lstat

Использование в Deno

import { lstat } from "node:fs/promises";

Вариант 1

lstat(
path: PathLike,
opts?: StatOptions & { bigint?: false | undefined; },
): Promise<Stats>

Эквивалентно fsPromises.stat(), если только path не указывает на символическую ссылку; в этом случае выполняется stat самой ссылки, а не файла, на который она указывает. Дополнительные сведения см. в документе POSIX lstat(2).

Параметры

path: PathLike
opts: StatOptions & { bigint?: false | undefined; }
необязательный

Тип возвращаемого значения

Promise<Stats>

Возвращает объект {fs.Stats} для указанной символической ссылки path.

Вариант 2

lstat(
path: PathLike,
opts: StatOptions & { bigint: true; },
): Promise<BigIntStats>

Параметры

path: PathLike
opts: StatOptions & { bigint: true; }

Тип возвращаемого значения

Promise<BigIntStats>

Вариант 3

lstat(
path: PathLike,
opts?: StatOptions,
): Promise<Stats | BigIntStats>

Параметры

path: PathLike
opts: StatOptions
необязательный

Тип возвращаемого значения

Promise<Stats | BigIntStats>

функция lutimes

Использование в Deno

import { lutimes } from "node:fs/promises";
lutimes(
path: PathLike,
atime: TimeLike,
mtime: TimeLike,
): Promise<void>

Изменяет время доступа и время модификации файла так же, как fsPromises.utimes(), за исключением того, что если путь указывает на символическую ссылку, она не разыменовывается: вместо этого изменяются временные метки самой символической ссылки.

Параметры

path: PathLike
atime: TimeLike
mtime: TimeLike

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция mkdir

Использование в Deno

import { mkdir } from "node:fs/promises";

Перегрузка 1

mkdir(
path: PathLike,
options: MakeDirectoryOptions & { recursive: true; },
): Promise<string | undefined>

Асинхронно создает каталог.

Необязательный аргумент options может быть целым числом, задающим mode (права доступа и биты sticky), или объектом со свойством mode и свойством recursive, указывающим, следует ли создавать родительские каталоги. Вызов fsPromises.mkdir(), когда path — существующий каталог, приводит к отклонению промиса только в том случае, если recursive имеет значение false.

import { mkdir } from 'node:fs/promises';

try {
  const projectFolder = new URL('./test/project/', import.meta.url);
  const createDir = await mkdir(projectFolder, { recursive: true });

  console.log(`created ${createDir}`);
} catch (err) {
  console.error(err.message);
}

Параметры

path: PathLike
options: MakeDirectoryOptions & { recursive: true; }

Тип возвращаемого значения

Promise<string | undefined>

При успешном выполнении возвращает undefined, если recursive имеет значение false, или путь к первому созданному каталогу, если recursive имеет значение true.

Перегрузка 2

mkdir(
path: PathLike,
options?:
Mode
| (MakeDirectoryOptions & { recursive?: false | undefined; })
| null
,
): Promise<void>

Асинхронный mkdir(2) — создание каталога.

Параметры

path: PathLike

Путь к файлу. Если указан URL, он должен использовать протокол file:.

options:
Mode
| (MakeDirectoryOptions & { recursive?: false | undefined; })
| null
необязательный

Режим доступа к файлу или объект, который может задавать режим доступа к файлу и указывать, следует ли создавать родительские каталоги. Если передана строка, она разбирается как восьмеричное целое число. Если значение не указано, по умолчанию используется 0o777.

Тип возвращаемого значения

Promise<void>

Перегрузка 3

mkdir(
path: PathLike,
options?:
Mode
| MakeDirectoryOptions
| null
,
): Promise<string | undefined>

Асинхронный mkdir(2) — создание каталога.

Параметры

path: PathLike

Путь к файлу. Если указан URL, он должен использовать протокол file:.

options:
Mode
| MakeDirectoryOptions
| null
необязательный

Режим доступа к файлу или объект, который может задавать режим доступа к файлу и указывать, следует ли создавать родительские каталоги. Если передана строка, она разбирается как восьмеричное целое число. Если значение не указано, по умолчанию используется 0o777.

Тип возвращаемого значения

Promise<string | undefined>

функция mkdtemp

Использование в Deno

import { mkdtemp } from "node:fs/promises";

Перегрузка 1

mkdtemp(
prefix: string,
options?:
ObjectEncodingOptions
| BufferEncoding
| null
,
): Promise<string>

Создает уникальный временный каталог. Уникальное имя каталога генерируется добавлением шести случайных символов в конец указанного prefix. Из-за различий между платформами не рекомендуется добавлять завершающие символы X в prefix. На некоторых платформах, в частности BSD, может возвращаться более шести случайных символов, а завершающие символы X в prefix могут заменяться случайными символами.

Необязательный аргумент options может быть строкой, задающей кодировку, или объектом со свойством encoding, задающим используемую кодировку символов.

import { mkdtemp } from 'node:fs/promises';
import { join } from 'node:path';
import { tmpdir } from 'node:os';

try {
  await mkdtemp(join(tmpdir(), 'foo-'));
} catch (err) {
  console.error(err);
}

Метод fsPromises.mkdtemp() добавит шесть случайно выбранных символов непосредственно к строке prefix. Например, если задан каталог /tmp, а временный каталог требуется создать внутри /tmp, строка prefix должна оканчиваться разделителем пути, специфичным для платформы (import { sep } from 'node:path').

Параметры

prefix: string
options:
ObjectEncodingOptions
| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<string>

Возвращает строку, содержащую путь в файловой системе к созданному временному каталогу.

Перегрузка 2

mkdtemp(
prefix: string,
options: BufferEncodingOption,
): Promise<Buffer>

Асинхронно создает уникальный временный каталог. Генерирует шесть случайных символов, которые добавляются после обязательного prefix для создания уникального временного каталога.

Параметры

prefix: string
options: BufferEncodingOption

Кодировка (или объект, задающий кодировку), используемая для кодирования результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<Buffer>

Перегрузка 3

mkdtemp(
prefix: string,
options?:
ObjectEncodingOptions
| BufferEncoding
| null
,
): Promise<string | Buffer>

Асинхронно создает уникальный временный каталог. Генерирует шесть случайных символов, которые добавляются после обязательного prefix для создания уникального временного каталога.

Параметры

prefix: string
options:
ObjectEncodingOptions
| BufferEncoding
| null
необязательный

Кодировка (или объект, задающий кодировку), используемая для кодирования результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<string | Buffer>

функция open

Использование в Deno

import { open } from "node:fs/promises";
open(
path: PathLike,
flags?: string | number,
mode?: Mode,
): Promise<FileHandle>

Открывает FileHandle.

Подробнее см. документацию POSIX open(2).

Некоторые символы (< > : " / \ | ? *) зарезервированы в Windows, как описано в разделе Имена файлов, пути и пространства имен. В NTFS, если имя файла содержит двоеточие, Node.js откроет файловый поток, как описано на этой странице MSDN.

Параметры

path: PathLike
flags: string | number = 'r'
необязательный

См. support of file system flags``.

mode: Mode = 0o666
необязательный

Задает режим доступа к файлу (права доступа и биты sticky), если файл создается.

Тип возвращаемого значения

Promise<FileHandle>

Возвращает объект {FileHandle}.


функция opendir

Использование в Deno

import { opendir } from "node:fs/promises";
opendir(
path: PathLike,
options?: OpenDirOptions,
): Promise<Dir>

Асинхронно открывает каталог для последовательного просмотра. Подробнее см. документацию POSIX opendir(3).

Создает объект fs.Dir, содержащий все необходимые функции для чтения содержимого каталога и завершения работы с ним.

Параметр encoding задает кодировку для path при открытии каталога и последующих операциях чтения.

Пример использования асинхронной итерации:

import { opendir } from 'node:fs/promises';

try {
  const dir = await opendir('./');
  for await (const dirent of dir)
    console.log(dirent.name);
} catch (err) {
  console.error(err);
}

При использовании асинхронного итератора объект fs.Dir будет автоматически закрыт после завершения итератора.

Параметры

path: PathLike
options: OpenDirOptions
необязательный

Тип возвращаемого значения

Promise<Dir>

Возвращает объект {fs.Dir}.


функция readdir

Использование в Deno

import { readdir } from "node:fs/promises";

Перегрузка 1

readdir(
path: PathLike,
options?:
(ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; })
| BufferEncoding
| null
,
): Promise<string[]>

Читает содержимое каталога.

Необязательный аргумент options может быть строкой, задающей кодировку, или объектом со свойством encoding, задающим кодировку символов для имен файлов. Если для encoding задано значение 'buffer', возвращаемые имена файлов будут представлены объектами Buffer.

Если для options.withFileTypes задано значение true, возвращаемый массив будет содержать объекты fs.Dirent.

import { readdir } from 'node:fs/promises';

try {
  const files = await readdir(path);
  for (const file of files)
    console.log(file);
} catch (err) {
  console.error(err);
}

Параметры

path: PathLike
options:
(ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; })
| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<string[]>

Возвращает массив имен файлов в каталоге, за исключением '.' и '..'.

Перегрузка 2

readdir(
path: PathLike,
options: { encoding: "buffer"; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | "buffer",
): Promise<Buffer[]>

Асинхронный readdir(3) — чтение каталога.

Параметры

path: PathLike

Путь к файлу. Если указан URL, он должен использовать протокол file:.

options: { encoding: "buffer"; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | "buffer"

Кодировка (или объект, задающий кодировку), используемая для кодирования результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<Buffer[]>

Перегрузка 3

readdir(
path: PathLike,
options?:
(ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; })
| BufferEncoding
| null
,
): Promise<string[] | Buffer[]>

Асинхронный readdir(3) — чтение каталога.

Параметры

path: PathLike

Путь к файлу. Если указан URL, он должен использовать протокол file:.

options:
(ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; })
| BufferEncoding
| null
необязательный

Кодировка (или объект, задающий кодировку), используемая для кодирования результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<string[] | Buffer[]>

Перегрузка 4

readdir(
path: PathLike,
options: ObjectEncodingOptions & { withFileTypes: true; recursive?: boolean | undefined; },
): Promise<Dirent[]>

Асинхронный readdir(3) — чтение каталога.

Параметры

path: PathLike

Путь к файлу. Если указан URL, он должен использовать протокол file:.

options: ObjectEncodingOptions & { withFileTypes: true; recursive?: boolean | undefined; }

При вызове с withFileTypes: true результатом будет массив объектов Dirent.

Тип возвращаемого значения

Promise<Dirent[]>

функция readFile

Использование в Deno

import { readFile } from "node:fs/promises";

Перегрузка 1

readFile(
path: PathLike | FileHandle,
options?: ({ encoding?: null | undefined; flag?: OpenMode | undefined; } & Abortable) | null,
): Promise<Buffer>

Асинхронно читает всё содержимое файла.

Если кодировка не указана (с помощью options.encoding), данные возвращаются в виде объекта Buffer. В противном случае данные будут представлены строкой.

Если options — строка, она задаёт кодировку.

Если path является каталогом, поведение fsPromises.readFile() зависит от платформы. В macOS, Linux и Windows промис будет отклонён с ошибкой. Во FreeBSD будет возвращено представление содержимого каталога.

Пример чтения файла package.json, расположенного в том же каталоге, что и выполняемый код:

import { readFile } from 'node:fs/promises';
try {
  const filePath = new URL('./package.json', import.meta.url);
  const contents = await readFile(filePath, { encoding: 'utf8' });
  console.log(contents);
} catch (err) {
  console.error(err.message);
}

Текущий запрос readFile можно прервать с помощью AbortSignal. Если запрос прерван, возвращённый промис отклоняется с ошибкой AbortError:

import { readFile } from 'node:fs/promises';

try {
  const controller = new AbortController();
  const { signal } = controller;
  const promise = readFile(fileName, { signal });

  // Abort the request before the promise settles.
  controller.abort();

  await promise;
} catch (err) {
  // When a request is aborted - err is an AbortError
  console.error(err);
}

Прерывание текущего запроса не прерывает отдельные запросы операционной системы, а прекращает внутреннюю буферизацию, выполняемую fs.readFile.

Указанный FileHandle должен поддерживать чтение.

Параметры

path: PathLike | FileHandle

имя файла или FileHandle

options: ({ encoding?: null | undefined; flag?: OpenMode | undefined; } & Abortable) | null
необязательный

Тип возвращаемого значения

Promise<Buffer>

При успешном выполнении возвращает содержимое файла.

Перегрузка 2

readFile(
path: PathLike | FileHandle,
options: ({ encoding: BufferEncoding; flag?: OpenMode | undefined; } & Abortable) | BufferEncoding,
): Promise<string>

Асинхронно читает всё содержимое файла.

Параметры

path: PathLike | FileHandle

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:. Если указан FileHandle, соответствующий файл не будет закрыт автоматически.

options: ({ encoding: BufferEncoding; flag?: OpenMode | undefined; } & Abortable) | BufferEncoding

Объект, который может содержать необязательный флаг. Если флаг не указан, по умолчанию используется 'r'.

Тип возвращаемого значения

Promise<string>

Перегрузка 3

readFile(
path: PathLike | FileHandle,
options?:
(
ObjectEncodingOptions
& Abortable
& { flag?: OpenMode | undefined; }
)

| BufferEncoding
| null
,
): Promise<string | Buffer>

Асинхронно читает всё содержимое файла.

Параметры

path: PathLike | FileHandle

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:. Если указан FileHandle, соответствующий файл не будет закрыт автоматически.

options:
(
ObjectEncodingOptions
& Abortable
& { flag?: OpenMode | undefined; }
)

| BufferEncoding
| null
необязательный

Объект, который может содержать необязательный флаг. Если флаг не указан, по умолчанию используется 'r'.

Тип возвращаемого значения

Promise<string | Buffer>

функция readlink

Использование в Deno

import { readlink } from "node:fs/promises";

Перегрузка 1

readlink(
path: PathLike,
options?:
ObjectEncodingOptions
| BufferEncoding
| null
,
): Promise<string>

Читает содержимое символической ссылки, на которую указывает path. Подробнее см. в документации POSIX по readlink(2). При успешном выполнении промис возвращает linkString.

Необязательный аргумент options может быть строкой, задающей кодировку, или объектом со свойством encoding, задающим кодировку символов для возвращаемого пути ссылки. Если для encoding задано значение 'buffer', возвращаемый путь ссылки будет представлен объектом Buffer.

Параметры

path: PathLike
options:
ObjectEncodingOptions
| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<string>

При успешном выполнении возвращает linkString.

Перегрузка 2

readlink(
path: PathLike,
options: BufferEncodingOption,
): Promise<Buffer>

Асинхронный readlink(2) — чтение значения символической ссылки.

Параметры

path: PathLike

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:.

options: BufferEncodingOption

Кодировка (или объект с указанием кодировки), используемая для результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<Buffer>

Перегрузка 3

readlink(
path: PathLike,
options?:
ObjectEncodingOptions
| string
| null
,
): Promise<string | Buffer>

Асинхронный readlink(2) — чтение значения символической ссылки.

Параметры

path: PathLike

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:.

options:
ObjectEncodingOptions
| string
| null
необязательный

Кодировка (или объект с указанием кодировки), используемая для результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<string | Buffer>

функция realpath

Использование в Deno

import { realpath } from "node:fs/promises";

Перегрузка 1

realpath(
path: PathLike,
options?:
ObjectEncodingOptions
| BufferEncoding
| null
,
): Promise<string>

Определяет фактическое расположение path, используя ту же семантику, что и функция fs.realpath.native().

Поддерживаются только пути, которые можно преобразовать в строки UTF-8.

Необязательный аргумент options может быть строкой, задающей кодировку, или объектом со свойством encoding, задающим кодировку символов для пути. Если для encoding задано значение 'buffer', возвращаемый путь будет представлен объектом Buffer.

В Linux, если Node.js скомпонован с musl libc, для работы этой функции файловая система procfs должна быть смонтирована в /proc. Для Glibc это ограничение не действует.

Параметры

path: PathLike
options:
ObjectEncodingOptions
| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<string>

При успешном выполнении возвращает разрешённый путь.

Перегрузка 2

realpath(
path: PathLike,
options: BufferEncodingOption,
): Promise<Buffer>

Асинхронный realpath(3) — возврат канонического абсолютного пути.

Параметры

path: PathLike

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:.

options: BufferEncodingOption

Кодировка (или объект с указанием кодировки), используемая для результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<Buffer>

Перегрузка 3

realpath(
path: PathLike,
options?:
ObjectEncodingOptions
| BufferEncoding
| null
,
): Promise<string | Buffer>

Асинхронный realpath(3) — возврат канонического абсолютного пути.

Параметры

path: PathLike

Путь к файлу. Если указана URL-адрес, он должен использовать протокол file:.

options:
ObjectEncodingOptions
| BufferEncoding
| null
необязательный

Кодировка (или объект с указанием кодировки), используемая для результата. Если не указана, используется 'utf8'.

Тип возвращаемого значения

Promise<string | Buffer>

функция rename

Использование в Deno

import { rename } from "node:fs/promises";
rename(
oldPath: PathLike,
newPath: PathLike,
): Promise<void>

Переименовывает oldPath в newPath.

Параметры

oldPath: PathLike
newPath: PathLike

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция rm

Использование в Deno

import { rm } from "node:fs/promises";
rm(
path: PathLike,
options?: RmOptions,
): Promise<void>

Удаляет файлы и каталоги (по образцу стандартной утилиты POSIX rm).

Параметры

path: PathLike
options: RmOptions
необязательный

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция rmdir

Использование в Deno

import { rmdir } from "node:fs/promises";
rmdir(
path: PathLike,
options?: RmDirOptions,
): Promise<void>

Удаляет каталог, указанный в path.

При использовании fsPromises.rmdir() для файла (не каталога) промис отклоняется с ошибкой ENOENT в Windows и ошибкой ENOTDIR в POSIX.

Чтобы получить поведение, аналогичное команде Unix rm -rf, используйте fsPromises.rm() с параметрами { recursive: true, force: true }.

Параметры

path: PathLike
options: RmDirOptions
необязательный

Тип возвращаемого значения

Promise<void>

При успешном выполнении возвращает undefined.


функция stat

Использование в Deno

import { stat } from "node:fs/promises";

Перегрузка 1

stat(
path: PathLike,
opts?: StatOptions & { bigint?: false | undefined; },
): Promise<Stats>

Параметры

path: PathLike
opts: StatOptions & { bigint?: false | undefined; }
необязательный

Тип возвращаемого значения

Promise<Stats>

При успешном выполнении возвращает объект {fs.Stats} для указанного path.

Перегрузка 2

stat(
path: PathLike,
opts: StatOptions & { bigint: true; },
): Promise<BigIntStats>

Параметры

path: PathLike
opts: StatOptions & { bigint: true; }

Тип возвращаемого значения

Promise<BigIntStats>

Перегрузка 3

stat(
path: PathLike,
opts?: StatOptions,
): Promise<Stats | BigIntStats>

Параметры

path: PathLike
opts: StatOptions
необязательный

Тип возвращаемого значения

Promise<Stats | BigIntStats>

функция statfs

Использование в Deno

import { statfs } from "node:fs/promises";

Перегрузка 1

statfs(
path: PathLike,
opts?: StatFsOptions & { bigint?: false | undefined; },
): Promise<StatsFs>

Параметры

path: PathLike
opts: StatFsOptions & { bigint?: false | undefined; }
необязательный

Тип возвращаемого значения

Promise<StatsFs>

Возвращает объект {fs.StatFs} для указанного path.

Перегрузка 2

statfs(
path: PathLike,
opts: StatFsOptions & { bigint: true; },
): Promise<BigIntStatsFs>

Параметры

path: PathLike
opts: StatFsOptions & { bigint: true; }

Тип возвращаемого значения

Promise<BigIntStatsFs>

Перегрузка 3

statfs(
path: PathLike,
opts?: StatFsOptions,
): Promise<StatsFs | BigIntStatsFs>

Параметры

path: PathLike
opts: StatFsOptions
необязательный

Тип возвращаемого значения

Promise<StatsFs | BigIntStatsFs>

функция symlink

Использование в Deno

import { symlink } from "node:fs/promises";
symlink(
target: PathLike,
path: PathLike,
type?: string | null,
): Promise<void>

Создаёт символическую ссылку.

Аргумент type используется только на платформах Windows и может принимать значения 'dir', 'file' или 'junction'. Если аргумент type не является строкой, Node.js автоматически определит тип target и использует 'file' или 'dir'. Если target не существует, будет использовано 'file'. Для точек соединения Windows требуется, чтобы путь назначения был абсолютным. При использовании 'junction' аргумент target будет автоматически преобразован в абсолютный путь. Точки соединения на томах NTFS могут указывать только на каталоги.

Параметры

target: PathLike
path: PathLike
type: string | null = 'null'
необязательный

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


функция truncate

Использование в Deno

import { truncate } from "node:fs/promises";
truncate(
path: PathLike,
len?: number,
): Promise<void>

Укорачивает или увеличивает длину содержимого в path до len байт.

Параметры

path: PathLike
len: number = 0
необязательный

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


функция unlink

Использование в Deno

import { unlink } from "node:fs/promises";
unlink(path: PathLike): Promise<void>

Если path указывает на символическую ссылку, она удаляется без воздействия на файл или каталог, на который ссылается. Если path указывает на путь к файлу, не являющемуся символической ссылкой, файл удаляется. Подробнее см. в документации POSIX для unlink(2).

Параметры

path: PathLike

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


функция utimes

Использование в Deno

import { utimes } from "node:fs/promises";
utimes(
path: PathLike,
atime: TimeLike,
mtime: TimeLike,
): Promise<void>

Изменяет временные метки файловой системы объекта, на который ссылается path.

Для аргументов atime и mtime действуют следующие правила:

  • Значения могут быть числами, представляющими время эпохи Unix, значениями Date или числовой строкой, например '123456789.0'.
  • Если значение невозможно преобразовать в число либо оно равно NaN, Infinity или -Infinity, будет выброшено исключение Error.

Параметры

path: PathLike
atime: TimeLike
mtime: TimeLike

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


функция watch

Использование в Deno

import { watch } from "node:fs/promises";

Перегрузка 1

watch(
filename: PathLike,
options: (WatchOptions & { encoding: "buffer"; }) | "buffer",
): AsyncIterable<FileChangeInfo<Buffer>>

Возвращает асинхронный итератор, отслеживающий изменения в filename, где filename — файл или каталог.

import { watch } from 'node:fs/promises';

const ac = new AbortController();
const { signal } = ac;
setTimeout(() => ac.abort(), 10000);

(async () => {
  try {
    const watcher = watch(__filename, { signal });
    for await (const event of watcher)
      console.log(event);
  } catch (err) {
    if (err.name === 'AbortError')
      return;
    throw err;
  }
})();

На большинстве платформ 'rename' создаётся при появлении или исчезновении имени файла в каталоге.

Для fsPromises.watch() также применяются все caveats для fs.watch().

Параметры

filename: PathLike
options: (WatchOptions & { encoding: "buffer"; }) | "buffer"

Тип возвращаемого значения

AsyncIterable<FileChangeInfo<Buffer>>

объектов со следующими свойствами:

Перегрузка 2

watch(
filename: PathLike,
options?: WatchOptions | BufferEncoding,
): AsyncIterable<FileChangeInfo<string>>

Отслеживает изменения в filename, где filename — файл или каталог, и возвращает FSWatcher.

Параметры

filename: PathLike

Путь к файлу или каталогу. Если указан URL, он должен использовать протокол file:.

options: WatchOptions | BufferEncoding
необязательный

Кодировка имени файла, передаваемого обработчику, либо объект с необязательными параметрами encoding, persistent и recursive. Если encoding не задан, используется значение по умолчанию 'utf8'. Если persistent не задан, используется значение по умолчанию true. Если recursive не задан, используется значение по умолчанию false.

Тип возвращаемого значения

AsyncIterable<FileChangeInfo<string>>

Перегрузка 3

watch(
filename: PathLike,
options: WatchOptions | string,
): AsyncIterable<FileChangeInfo<string>> | AsyncIterable<FileChangeInfo<Buffer>>

Отслеживает изменения в filename, где filename — файл или каталог, и возвращает FSWatcher.

Параметры

filename: PathLike

Путь к файлу или каталогу. Если указан URL, он должен использовать протокол file:.

options: WatchOptions | string

Кодировка имени файла, передаваемого обработчику, либо объект с необязательными параметрами encoding, persistent и recursive. Если encoding не задан, используется значение по умолчанию 'utf8'. Если persistent не задан, используется значение по умолчанию true. Если recursive не задан, используется значение по умолчанию false.

Тип возвращаемого значения

AsyncIterable<FileChangeInfo<string>> | AsyncIterable<FileChangeInfo<Buffer>>

функция writeFile

Использование в Deno

import { writeFile } from "node:fs/promises";
writeFile(
file: PathLike | FileHandle,
data:
string
| ArrayBufferView
| Iterable<string | ArrayBufferView>
| AsyncIterable<string | ArrayBufferView>
| Stream
,
options?:
(
ObjectEncodingOptions
& { mode?: Mode | undefined; flag?: OpenMode | undefined; flush?: boolean | undefined; }
& Abortable
)

| BufferEncoding
| null
,
): Promise<void>

Асинхронно записывает данные в файл, заменяя его, если он уже существует. data может быть строкой, буфером, объектом AsyncIterable или объектом Iterable.

Параметр encoding игнорируется, если data является буфером.

Если options — строка, она задаёт кодировку.

Параметр mode влияет только на вновь созданный файл. Подробнее см. fs.open().

Указанный FileHandle должен поддерживать запись.

Небезопасно вызывать fsPromises.writeFile() несколько раз для одного файла, не дождавшись выполнения promise.

Подобно fsPromises.readFile, fsPromises.writeFile — это вспомогательный метод, который для записи переданного ему буфера выполняет несколько вызовов write. В коде, критичном к производительности, рекомендуется использовать fs.createWriteStream() или filehandle.createWriteStream().

Для отмены fsPromises.writeFile() можно использовать AbortSignal. Отмена выполняется «по возможности», поэтому часть данных, скорее всего, всё равно будет записана.

import { writeFile } from 'node:fs/promises';
import { Buffer } from 'node:buffer';

try {
  const controller = new AbortController();
  const { signal } = controller;
  const data = new Uint8Array(Buffer.from('Hello Node.js'));
  const promise = writeFile('message.txt', data, { signal });

  // Abort the request before the promise settles.
  controller.abort();

  await promise;
} catch (err) {
  // When a request is aborted - err is an AbortError
  console.error(err);
}

Прерывание выполняющегося запроса не отменяет отдельные запросы операционной системы, а останавливает внутреннюю буферизацию, выполняемую fs.writeFile.

Параметры

file: PathLike | FileHandle

имя файла или FileHandle

data:
string
| ArrayBufferView
| Iterable<string | ArrayBufferView>
| AsyncIterable<string | ArrayBufferView>
| Stream
options:
(
ObjectEncodingOptions
& { mode?: Mode | undefined; flag?: OpenMode | undefined; flush?: boolean | undefined; }
& Abortable
)

| BufferEncoding
| null
необязательный

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


функция lchmod

Использование в Deno

import { lchmod } from "node:fs/promises";
lchmod(
path: PathLike,
mode: Mode,
): Promise<void>
Устарело
Совместимость с Deno

Реализация lchmod не реализована.

Изменяет права доступа символической ссылки.

Этот метод реализован только в macOS.

Параметры

path: PathLike
mode: Mode

Тип возвращаемого значения

Promise<void>

В случае успеха возвращает undefined.


интерфейс CreateReadStreamOptions

расширяет Abortable

Использование в Deno

import { type CreateReadStreamOptions } from "node:fs/promises";

Свойства

encoding:
BufferEncoding
| null
| undefined
необязательный
autoClose: boolean | undefined
необязательный
emitClose: boolean | undefined
необязательный
start: number | undefined
необязательный
end: number | undefined
необязательный
highWaterMark: number | undefined
необязательный

интерфейс CreateWriteStreamOptions

Использование в Deno

import { type CreateWriteStreamOptions } from "node:fs/promises";

Свойства

encoding:
BufferEncoding
| null
| undefined
необязательный
autoClose: boolean | undefined
необязательный
emitClose: boolean | undefined
необязательный
start: number | undefined
необязательный
highWaterMark: number | undefined
необязательный
flush: boolean | undefined
необязательный

интерфейс FileChangeInfo

Использование в Deno

import { type FileChangeInfo } from "node:fs/promises";

Параметры типа

T extends string | Buffer

Свойства

eventType: WatchEventType
filename: T | null

интерфейс FileHandle

Использование в Deno

import { type FileHandle } from "node:fs/promises";

Свойства

fd: number
только для чтения

Числовой дескриптор файла, которым управляет объект {FileHandle}.

Методы

appendFile(
data: string | Uint8Array,
options?:
(ObjectEncodingOptions & Abortable)
| BufferEncoding
| null
,
): Promise<void>

Псевдоним для filehandle.writeFile().

При работе с дескрипторами файлов режим нельзя изменить по сравнению с тем, который был задан с помощью fsPromises.open(). Поэтому это эквивалентно filehandle.writeFile().

chown(
uid: number,
gid: number,
): Promise<void>

Изменяет владельца файла. Обёртка для chown(2).

chmod(mode: Mode): Promise<void>

Изменяет разрешения файла. См. chmod(2).

createReadStream(options?: CreateReadStreamOptions): ReadStream

В отличие от значения highWaterMark по умолчанию, равного 16 КиБ для stream.Readable, поток, возвращаемый этим методом, имеет значение highWaterMark по умолчанию, равное 64 КиБ.

options может включать значения start и end для чтения диапазона байтов из файла, а не всего файла. И start, и end включаются в диапазон и отсчитываются с 0; допустимые значения находятся в диапазоне [0, Number.MAX_SAFE_INTEGER]. Если start не указано или равно undefined, filehandle.createReadStream() выполняет последовательное чтение с текущей позиции файла. encoding может принимать любое из значений, допустимых для Buffer.

Если FileHandle указывает на символьное устройство, поддерживающее только блокирующее чтение (например, клавиатуру или звуковую карту), операции чтения не завершаются до появления данных. Это может помешать завершению процесса и естественному закрытию потока.

По умолчанию поток выдаёт событие 'close' после уничтожения. Чтобы изменить это поведение, задайте для параметра emitClose значение false.

import { open } from 'node:fs/promises';

const fd = await open('/dev/input/event0');
// Create a stream from some character device.
const stream = fd.createReadStream();
setTimeout(() => {
  stream.close(); // This may not close the stream.
  // Artificially marking end-of-stream, as if the underlying resource had
  // indicated end-of-file by itself, allows the stream to close.
  // This does not cancel pending read operations, and if there is such an
  // operation, the process may still not be able to exit successfully
  // until it finishes.
  stream.push(null);
  stream.read(0);
}, 100);

Если autoClose имеет значение false, дескриптор файла не будет закрыт, даже если произойдёт ошибка. Приложение должно самостоятельно закрыть его и убедиться, что утечки дескрипторов файлов не происходит. Если для autoClose задано значение true (поведение по умолчанию), дескриптор файла будет закрыт автоматически при 'error' или 'end'.

Пример чтения последних 10 байтов файла длиной 100 байтов:

import { open } from 'node:fs/promises';

const fd = await open('sample.txt');
fd.createReadStream({ start: 90, end: 99 });
createWriteStream(options?: CreateWriteStreamOptions): WriteStream

options также может включать параметр start, позволяющий записывать данные в позицию после начала файла; допустимые значения находятся в диапазоне [0, Number.MAX_SAFE_INTEGER]. Для изменения файла вместо его замены может потребоваться задать для параметра flags open значение r+ вместо значения по умолчанию r. encoding может принимать любое из значений, допустимых для Buffer.

Если для autoClose задано значение true (поведение по умолчанию), дескриптор файла будет автоматически закрыт при 'error' или 'finish'. Если autoClose имеет значение false, дескриптор файла не будет закрыт, даже если произойдёт ошибка. Приложение должно самостоятельно закрыть его и убедиться, что утечки дескрипторов файлов не происходит.

По умолчанию поток выдаёт событие 'close' после уничтожения. Чтобы изменить это поведение, задайте для параметра emitClose значение false.

datasync(): Promise<void>

Переводит все текущие операции ввода-вывода, поставленные в очередь для файла, в состояние завершения синхронизированного ввода-вывода операционной системы. Подробности см. в документации POSIX для fdatasync(2).

В отличие от filehandle.sync, этот метод не сбрасывает изменённые метаданные.

sync(): Promise<void>

Запрашивает сброс всех данных открытого дескриптора файла на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Подробности см. в документации POSIX для fsync(2).

read<T extends ArrayBufferView>(
buffer: T,
offset?: number | null,
length?: number | null,
position?: number | null,
): Promise<FileReadResult<T>>

Читает данные из файла и сохраняет их в заданном буфере.

Если файл не изменяется одновременно, достижение конца файла определяется нулевым количеством прочитанных байтов.

read<T extends ArrayBufferView = Buffer>(
buffer: T,
options?: FileReadOptions<T>,
): Promise<FileReadResult<T>>
read<T extends ArrayBufferView = Buffer>(options?: FileReadOptions<T>): Promise<FileReadResult<T>>
readableWebStream(options?: ReadableWebStreamOptions): ReadableStream

Возвращает ReadableStream, который можно использовать для чтения данных файла.

Если вызвать этот метод более одного раза или после закрытия либо начала закрытия FileHandle, будет выброшена ошибка.

import {
  open,
} from 'node:fs/promises';

const file = await open('./some/file/to/read');

for await (const chunk of file.readableWebStream())
  console.log(chunk);

await file.close();

Хотя ReadableStream прочитает файл до конца, он не закроет FileHandle автоматически. Пользовательский код должен по-прежнему вызывать метод fileHandle.close().

readFile(options?: { encoding?: null | undefined; flag?: OpenMode | undefined; } | null): Promise<Buffer>

Асинхронно читает всё содержимое файла.

Если options является строкой, она задаёт encoding.

FileHandle должен поддерживать чтение.

Если для дескриптора файла был выполнен один или несколько вызовов filehandle.read(), а затем вызов filehandle.readFile(), данные будут прочитаны с текущей позиции до конца файла. Чтение не всегда начинается с начала файла.

readFile(options: { encoding: BufferEncoding; flag?: OpenMode | undefined; } | BufferEncoding): Promise<string>

Асинхронно читает всё содержимое файла. Базовый файл не будет закрыт автоматически. FileHandle должен быть открыт для чтения.

readFile(options?:
(ObjectEncodingOptions & { flag?: OpenMode | undefined; })
| BufferEncoding
| null
): Promise<string | Buffer>

Асинхронно читает всё содержимое файла. Базовый файл не будет закрыт автоматически. FileHandle должен быть открыт для чтения.

readLines(options?: CreateReadStreamOptions): ReadlineInterface

Вспомогательный метод для создания интерфейса readline и чтения файла в виде потока. Параметры см. в filehandle.createReadStream().

import { open } from 'node:fs/promises';

const file = await open('./some/file/to/read');

for await (const line of file.readLines()) {
  console.log(line);
}
stat(opts?: StatOptions & { bigint?: false | undefined; }): Promise<Stats>
stat(opts: StatOptions & { bigint: true; }): Promise<BigIntStats>
stat(opts?: StatOptions): Promise<Stats | BigIntStats>
truncate(len?: number): Promise<void>

Обрезает файл.

Если размер файла превышает len байт, в файле останутся только первые len байт.

В следующем примере в файле остаются только первые четыре байта:

import { open } from 'node:fs/promises';

let filehandle = null;
try {
  filehandle = await open('temp.txt', 'r+');
  await filehandle.truncate(4);
} finally {
  await filehandle?.close();
}

Если ранее размер файла был меньше len байт, он увеличивается, а добавленная часть заполняется нулевыми байтами ('\0'):

Если len отрицательно, будет использовано 0.

utimes(
atime: TimeLike,
mtime: TimeLike,
): Promise<void>

Изменяет временные метки файловой системы объекта, на который ссылается FileHandle, а в случае успеха выполняет промис без аргументов.

writeFile(
data: string | Uint8Array,
options?:
(ObjectEncodingOptions & Abortable)
| BufferEncoding
| null
,
): Promise<void>

Асинхронно записывает данные в файл, заменяя файл, если он уже существует. data может быть строкой, буфером, объектом AsyncIterable или объектом Iterable. В случае успеха промис выполняется без аргументов.

Если options является строкой, она задаёт encoding.

FileHandle должен поддерживать запись.

Небезопасно вызывать filehandle.writeFile() несколько раз для одного файла, не дождавшись выполнения (или отклонения) промиса.

Если для дескриптора файла был выполнен один или несколько вызовов filehandle.write(), а затем вызов filehandle.writeFile(), данные будут записаны с текущей позиции до конца файла. Запись не всегда начинается с начала файла.

write<TBuffer extends Uint8Array>(
buffer: TBuffer,
offset?: number | null,
length?: number | null,
position?: number | null,
): Promise<{ bytesWritten: number; buffer: TBuffer; }>

Записывает buffer в файл.

Промис выполняется с объектом, содержащим два свойства:

Небезопасно вызывать filehandle.write() несколько раз для одного файла, не дождавшись выполнения (или отклонения) промиса. В этом случае используйте filehandle.createWriteStream().

В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда добавляет данные в конец файла.

write<TBuffer extends Uint8Array>(
buffer: TBuffer,
options?: { offset?: number; length?: number; position?: number; },
): Promise<{ bytesWritten: number; buffer: TBuffer; }>
write(
data: string,
position?: number | null,
encoding?: BufferEncoding | null,
): Promise<{ bytesWritten: number; buffer: string; }>
writev(
buffers: readonly ArrayBufferView[],
position?: number,
): Promise<WriteVResult>

Записывает в файл массив объектов ArrayBufferView.

Промис выполняется с объектом, содержащим два свойства:

Небезопасно вызывать writev() несколько раз для одного файла, не дождавшись выполнения (или отклонения) промиса.

В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда добавляет данные в конец файла.

readv(
buffers: readonly ArrayBufferView[],
position?: number,
): Promise<ReadVResult>

Читает данные из файла и записывает их в массив объектов ArrayBufferView

close(): Promise<void>

Закрывает дескриптор файла после завершения всех ожидающих операций с ним.

import { open } from 'node:fs/promises';

let filehandle;
try {
  filehandle = await open('thefile.txt', 'r');
} finally {
  await filehandle?.close();
}
[[Symbol.asyncDispose]](): Promise<void>

Псевдоним для FileHandle.close().


интерфейс FileReadOptions

Использование в Deno

import { type FileReadOptions } from "node:fs/promises";

Параметры типа

T extends ArrayBufferView = Buffer

Свойства

buffer: T
необязательное
offset: number | null
необязательное
length: number | null
необязательное
position: number | null
необязательное

интерфейс FileReadResult

Использование в Deno

import { type FileReadResult } from "node:fs/promises";

Параметры типа

T extends ArrayBufferView

Свойства

bytesRead: number
buffer: T

интерфейс FlagAndOpenMode

Использование в Deno

import { type FlagAndOpenMode } from "node:fs/promises";

Свойства

mode: Mode | undefined
необязательное
flag: OpenMode | undefined
необязательное

интерфейс ReadableWebStreamOptions

Использование в Deno

import { type ReadableWebStreamOptions } from "node:fs/promises";

Свойства

type: "bytes" | undefined
необязательное

Какой поток открыть: обычный или 'bytes'.


переменная constants

Использование в Deno

import { constants } from "node:fs/promises";

Тип

fsConstants

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/fs/promises

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API