Spec-Zone.ru › Node.js

Файловая система

Исходный код: lib/fs.js

Стабильность: 2 — Стабильный

Модуль node:fs позволяет взаимодействовать с файловой системой способом, основанным на стандартных функциях POSIX.

Чтобы использовать API на основе промисов:

Модули JavaScript
import * as fs from 'node:fs/promises';
CommonJS
const fs = require('node:fs/promises');

Чтобы использовать API с колбэками и синхронный API:

Модули JavaScript
import * as fs from 'node:fs';
CommonJS
const fs = require('node:fs');

Все операции с файловой системой имеют синхронные формы, формы с колбэками и формы на основе промисов и доступны как с использованием синтаксиса CommonJS, так и модулей ES6 (ESM).

Пример с промисами

Операции на основе промисов возвращают промис, который выполняется после завершения асинхронной операции.

Модули JavaScript
import { unlink } from 'node:fs/promises';

try {
  await unlink('/tmp/hello');
  console.log('successfully deleted /tmp/hello');
} catch (error) {
  console.error('there was an error:', error.message);
}
CommonJS
const { unlink } = require('node:fs/promises');

(async function(path) {
  try {
    await unlink(path);
    console.log(`successfully deleted ${path}`);
  } catch (error) {
    console.error('there was an error:', error.message);
  }
})('/tmp/hello');

Пример с колбэком

Форма с колбэком принимает функцию обратного вызова, которая вызывается по завершении операции, в качестве последнего аргумента и выполняет операцию асинхронно. Аргументы, передаваемые функции обратного вызова, зависят от метода, но первый аргумент всегда зарезервирован для исключения. Если операция завершилась успешно, первым аргументом будет null или undefined.

Модули JavaScript
import { unlink } from 'node:fs';

unlink('/tmp/hello', (err) => {
  if (err) throw err;
  console.log('successfully deleted /tmp/hello');
});
CommonJS
const { unlink } = require('node:fs');

unlink('/tmp/hello', (err) => {
  if (err) throw err;
  console.log('successfully deleted /tmp/hello');
});

Версии API модуля node:fs на основе колбэков предпочтительнее API на основе промисов, если требуется максимальная производительность (как с точки зрения времени выполнения, так и выделения памяти).

Синхронный пример

Синхронный API блокирует цикл событий Node.js и дальнейшее выполнение JavaScript до завершения операции. Исключения выбрасываются немедленно, и их можно обработать с помощью try…catch или позволить им распространиться выше по стеку вызовов.

Модули JavaScript
import { unlinkSync } from 'node:fs';

try {
  unlinkSync('/tmp/hello');
  console.log('successfully deleted /tmp/hello');
} catch (err) {
  // handle the error
}
CommonJS
const { unlinkSync } = require('node:fs');

try {
  unlinkSync('/tmp/hello');
  console.log('successfully deleted /tmp/hello');
} catch (err) {
  // handle the error
}

API промисов

Добавлено в: v10.0.0
История
Версия Изменения
v14.0.0

Предоставляется как require('fs/promises').

v11.14.0, v10.17.0

Этот API больше не является экспериментальным.

v10.1.0

Доступ к API возможен только через require('fs').promises.

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

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

Класс: FileHandle

Добавлено в: v10.0.0

Объект <FileHandle> является оберткой для числового дескриптора файла.

Экземпляры объекта <FileHandle> создаются методом fsPromises.open().

Все объекты <FileHandle> являются объектами <EventEmitter>.

Если объект <FileHandle> не закрыт с помощью метода filehandle.close(), он попытается автоматически закрыть дескриптор файла и выдать предупреждение процесса, помогая предотвратить утечки памяти. Пожалуйста, не полагайтесь на это поведение, поскольку оно может быть ненадежным, а файл может остаться открытым. Вместо этого всегда явно закрывайте объекты <FileHandle>. В будущем Node.js может изменить это поведение.

Событие: 'close'
Добавлено в: v15.4.0

Событие 'close' генерируется после закрытия объекта <FileHandle>, когда его больше нельзя использовать.

filehandle.appendFile(data[, options])
Добавлено в: v10.0.0
История
Версия Изменения
v21.1.0, v20.10.0

Теперь поддерживается параметр flush.

v15.14.0, v14.18.0

Аргумент data поддерживает AsyncIterable, Iterable и Stream.

v14.0.0

Параметр data больше не преобразует неподдерживаемые входные данные в строки.

  • data <string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Stream>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • signal <AbortSignal> | <undefined> позволяет прервать выполняющуюся операцию writeFile. По умолчанию: undefined
  • Возвращает: <Promise> В случае успеха выполняется с undefined.

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

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

filehandle.chmod(mode)
Добавлено в: v10.0.0
  • mode <integer> битовая маска режима файла.
  • Возвращает: <Promise> При успешном выполнении выполняется с undefined.

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

filehandle.chown(uid, gid)
Добавлено в: v10.0.0
  • uid <integer> идентификатор пользователя нового владельца файла.
  • gid <integer> идентификатор группы новой группы файла.
  • Возвращает: <Promise> При успешном выполнении выполняется с undefined.

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

filehandle.close()
Добавлено в: v10.0.0
  • Возвращает: <Promise> При успешном выполнении выполняется с undefined.

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

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

let filehandle;
try {
  filehandle = await open('thefile.txt', 'r');
} finally {
  await filehandle?.close();
}
mjscopy
filehandle.createReadStream([options])
Добавлено в: v16.11.0
  • options <Object>
    • encoding <string> По умолчанию: null
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <integer>
    • end <integer> По умолчанию: Infinity
    • highWaterMark <integer> По умолчанию: 64 * 1024
    • signal <AbortSignal> | <undefined> По умолчанию: undefined
  • Возвращает: <fs.ReadStream>

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);
mjscopy

Если 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 });
mjscopy
filehandle.createWriteStream([options])
Добавлено в: v16.11.0
История
Версия Изменения
v21.0.0, v20.10.0

Параметр flush теперь поддерживается.

  • options <Object>
    • encoding <string> По умолчанию: 'utf8'
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <integer>
    • highWaterMark <number> По умолчанию: 16384
    • flush <boolean> Если true, перед закрытием выполняется сброс буферов файлового дескриптора. По умолчанию: false.
  • Возвращает: <fs.WriteStream>

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

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

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

filehandle.datasync()
Добавлено в: v10.0.0
  • Возвращает: <Promise> Выполняется с результатом undefined в случае успеха.

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

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

filehandle.fd
Добавлено в: v10.0.0
  • Тип: <number> Числовой файловый дескриптор, управляемый объектом <FileHandle>.
filehandle.pull([...transforms][, options])
Добавлено в: v25.9.0

Стабильность: 1 — экспериментальный

  • ...transforms <Function> | <Object> Необязательные преобразования, применяемые через stream/iter pull().
  • options <Object>
    • signal <AbortSignal>
    • autoClose <boolean> Закрыть файловый дескриптор при завершении потока. По умолчанию: false.
    • start <number> Смещение в байтах, с которого начинается чтение. Если указано, для чтения используется явное позиционирование (семантика pread). По умолчанию: текущая позиция в файле.
    • limit <number> Максимальное количество байтов для чтения до завершения итератора. Чтение прекращается, когда передано limit байтов или достигнут EOF — в зависимости от того, что наступит раньше. По умолчанию: чтение до EOF.
    • chunkSize <number> Размер в байтах буфера, выделяемого для каждой операции чтения. По умолчанию: 131072 (128 КБ).
  • Возвращает: {AsyncIterable<Uint8Array[]>}

Возвращает содержимое файла в виде асинхронного итерируемого объекта, используя pull-модель node:stream/iter. Чтение выполняется блоками по chunkSize байт (по умолчанию — 128 КБ). Если указаны преобразования, они применяются через stream/iter pull().

Файловый дескриптор блокируется на время потребления итерируемого объекта и разблокируется после завершения итерации, возникновения ошибки или прерывания потребителем.

Эта функция доступна только при включённом флаге --experimental-stream-iter.

Модули JavaScript
import { open } from 'node:fs/promises';
import { text } from 'node:stream/iter';
import { compressGzip } from 'node:zlib/iter';

const fh = await open('input.txt', 'r');

// Read as text
console.log(await text(fh.pull({ autoClose: true })));

// Read 1 KB starting at byte 100
const fh2 = await open('input.txt', 'r');
console.log(await text(fh2.pull({ start: 100, limit: 1024, autoClose: true })));

// Read with compression
const fh3 = await open('input.txt', 'r');
const compressed = fh3.pull(compressGzip(), { autoClose: true });
CommonJS
const { open } = require('node:fs/promises');
const { text } = require('node:stream/iter');
const { compressGzip } = require('node:zlib/iter');

async function run() {
  const fh = await open('input.txt', 'r');

  // Read as text
  console.log(await text(fh.pull({ autoClose: true })));

  // Read 1 KB starting at byte 100
  const fh2 = await open('input.txt', 'r');
  console.log(await text(fh2.pull({ start: 100, limit: 1024, autoClose: true })));

  // Read with compression
  const fh3 = await open('input.txt', 'r');
  const compressed = fh3.pull(compressGzip(), { autoClose: true });
}

run().catch(console.error);
filehandle.pullSync([...transforms][, options])
Добавлено в: v25.9.0

Стабильность: 1 — экспериментальный

  • ...transforms <Function> | <Object> Необязательные преобразования, применяемые через stream/iter pullSync().
  • options <Object>
    • autoClose <boolean> Закрывать файловый дескриптор по завершении потока. По умолчанию: false.
    • start <number> Смещение в байтах, с которого начинается чтение. Если указано, для чтения используется явное позиционирование. По умолчанию: текущая позиция в файле.
    • limit <number> Максимальное количество байтов для чтения до завершения итератора. По умолчанию: чтение до конца файла.
    • chunkSize <number> Размер в байтах буфера, выделяемого для каждой операции чтения. По умолчанию: 131072 (128 КБ).
  • Возвращает: {Iterable<Uint8Array[]>}

Синхронный аналог filehandle.pull(). Возвращает синхронный итерируемый объект, который считывает файл с помощью синхронного ввода-вывода в основном потоке. Данные считываются блоками по chunkSize байт (по умолчанию — 128 КБ).

Файловый дескриптор заблокирован на время обхода итерируемого объекта. В отличие от асинхронного pull(), этот метод не поддерживает AbortSignal, поскольку все операции выполняются синхронно.

Эта функция доступна только при включенном флаге --experimental-stream-iter.

Модули JavaScript
import { open } from 'node:fs/promises';
import { textSync, pipeToSync } from 'node:stream/iter';
import { compressGzipSync, decompressGzipSync } from 'node:zlib/iter';

const fh = await open('input.txt', 'r');

// Read as text (sync)
console.log(textSync(fh.pullSync({ autoClose: true })));

// Sync compress pipeline: file -> gzip -> file
const src = await open('input.txt', 'r');
const dst = await open('output.gz', 'w');
pipeToSync(src.pullSync(compressGzipSync(), { autoClose: true }), dst.writer({ autoClose: true }));
CommonJS
const { open } = require('node:fs/promises');
const { textSync, pipeToSync } = require('node:stream/iter');
const { compressGzipSync, decompressGzipSync } = require('node:zlib/iter');

async function run() {
  const fh = await open('input.txt', 'r');

  // Read as text (sync)
  console.log(textSync(fh.pullSync({ autoClose: true })));

  // Sync compress pipeline: file -> gzip -> file
  const src = await open('input.txt', 'r');
  const dst = await open('output.gz', 'w');
  pipeToSync(
    src.pullSync(compressGzipSync(), { autoClose: true }),
    dst.writer({ autoClose: true }),
  );
}

run().catch(console.error);
filehandle.read(buffer, offset, length, position)
Добавлено в: v10.0.0
История
Версия Изменения
v21.0.0

Поддерживает значения bigint в качестве position.

  • buffer <Buffer> | <TypedArray> | <DataView> Буфер, который будет заполнен считанными данными файла.
  • offset <integer> Позиция в буфере, с которой начинается запись данных. По умолчанию: 0
  • length <integer> Количество байтов для чтения. По умолчанию: buffer.byteLength - offset
  • position <integer> | <bigint> | <null> Позиция, с которой начинается чтение данных из файла. Если null или -1, данные будут считываться с текущей позиции в файле, а позиция будет обновлена. Если position — неотрицательное целое число, текущая позиция в файле останется без изменений. По умолчанию: null
  • Возвращает: <Promise> При успешном выполнении возвращает объект с двумя свойствами:
    • bytesRead <integer> Количество считанных байтов
    • buffer <Buffer> | <TypedArray> | <DataView> Ссылка на переданный аргумент buffer.

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

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

filehandle.read([options])
Добавлено в: v13.11.0, v12.17.0
История
Версия Изменения
v21.0.0

Принимает значения bigint в качестве position.

  • options <Object>
    • buffer <Buffer> | <TypedArray> | <DataView> Буфер, который будет заполнен считанными данными файла. По умолчанию: Buffer.alloc(16384)
    • offset <integer> Позиция в буфере, с которой начнётся заполнение. По умолчанию: 0
    • length <integer> Количество байтов для чтения. По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> | <null> Позиция, с которой следует начать чтение данных из файла. Если null или -1, данные будут считываться с текущей позиции в файле, и эта позиция будет обновлена. Если position — неотрицательное целое число, текущая позиция в файле останется неизменной. По умолчанию:: null
  • Возвращает: <Promise> При успешном выполнении возвращает объект с двумя свойствами:
    • bytesRead <integer> Количество прочитанных байтов
    • buffer <Buffer> | <TypedArray> | <DataView> Ссылка на переданный аргумент buffer.

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

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

filehandle.read(buffer[, options])
Добавлено в: v18.2.0, v16.17.0
История
Версия Изменения
v21.0.0

Принимает значения bigint в качестве position.

  • buffer <Buffer> | <TypedArray> | <DataView> Буфер, который будет заполнен считанными данными файла.
  • options <Object>
    • offset <integer> Позиция в буфере, с которой начнётся заполнение. По умолчанию: 0
    • length <integer> Количество байтов для чтения. По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> | <null> Позиция, с которой следует начать чтение данных из файла. Если null или -1, данные будут считываться с текущей позиции в файле, и эта позиция будет обновлена. Если position — неотрицательное целое число, текущая позиция в файле останется неизменной. По умолчанию:: null
  • Возвращает: <Promise> При успешном выполнении возвращает объект с двумя свойствами:
    • bytesRead <integer> Количество прочитанных байтов
    • buffer <Buffer> | <TypedArray> | <DataView> Ссылка на переданный аргумент buffer.

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

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

filehandle.readableWebStream([options])
Добавлено в: v17.0.0
История
Версия Изменения
v24.0.0, v22.17.0

API помечен как стабильный.

v23.8.0, v22.15.0

Удалена возможность создавать поток 'bytes'. Теперь потоки всегда являются потоками 'bytes'.

v20.0.0, v18.17.0

Добавлена возможность создавать поток 'bytes'.

  • options <Object>
    • autoClose <boolean> Если значение равно true, <FileHandle> закрывается при закрытии потока. По умолчанию: false
  • Возвращает: <ReadableStream>

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

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

Модули JavaScript
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();
CommonJS
const {
  open,
} = require('node:fs/promises');

(async () => {
  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(), если только для параметра autoClose не задано значение true.

filehandle.readFile(options)
Добавлено в: v10.0.0
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: null
    • signal <AbortSignal> позволяет прервать выполняющееся чтение файла
  • Возвращает: <Promise> Выполняется при успешном чтении и содержит содержимое файла. Если кодировка не указана (с помощью options.encoding), данные возвращаются как объект <Buffer>. В противном случае данные будут строкой.

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

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

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

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

filehandle.readLines([options])
Добавлено в: v18.11.0
  • options <Object>
    • encoding <string> По умолчанию: null
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <integer>
    • end <integer> По умолчанию: Infinity
    • highWaterMark <integer> По умолчанию: 64 * 1024
  • Возвращает: <readline.InterfaceConstructor>

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

Модули JavaScript
import { open } from 'node:fs/promises';

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

for await (const line of file.readLines()) {
  console.log(line);
}
CommonJS
const { open } = require('node:fs/promises');

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

  for await (const line of file.readLines()) {
    console.log(line);
  }
})();
filehandle.readv(buffers[, position])
Добавлено в: v13.13.0, v12.17.0
  • buffers <Buffer[]> | <TypedArray[]> | <DataView[]>
  • position <integer> | <null> Смещение от начала файла, с которого следует считывать данные. Если position не является значением number, данные будут считываться с текущей позиции. По умолчанию: null
  • Возвращает: <Promise> При успешном выполнении возвращает объект с двумя свойствами:
    • bytesRead <integer> количество прочитанных байтов
    • buffers <Buffer[]> | <TypedArray[]> | <DataView[]> свойство, содержащее ссылку на исходный buffers.

Читает данные из файла и записывает их в массив {ArrayBufferView}.

filehandle.stat([options])
Добавлено в: v10.0.0
История
Версия Изменения
v26.1.0

Теперь принимает дополнительное свойство signal, позволяющее прервать операцию.

v10.5.0

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

  • options <Object>
    • bigint <boolean> Следует ли числовым значениям в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • signal <AbortSignal> AbortSignal для отмены операции. По умолчанию: undefined.
  • Возвращает: <Promise> В случае выполнения содержит объект <fs.Stats> для файла.
filehandle.sync()
Добавлено в: v10.0.0
  • Возвращает: <Promise> В случае успешного выполнения содержит undefined.

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

filehandle.truncate(len)
Добавлено в: v10.0.0
  • len <integer> По умолчанию: 0
  • Возвращает: <Promise> В случае успешного выполнения содержит undefined.

Усекает файл.

Если размер файла превышает 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();
}
mjscopy

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

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

filehandle.utimes(atime, mtime)
Добавлено в: v10.0.0
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • Возвращает: <Promise>

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

filehandle.write(buffer, offset[, length[, position]])
Добавлено в: v10.0.0
История
Версия Изменения
v14.0.0

Параметр buffer больше не преобразует неподдерживаемые входные данные в буферы.

  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer> Начальная позиция данных для записи внутри buffer.
  • length <integer> Количество байтов, записываемых из buffer. По умолчанию: buffer.byteLength - offset
  • position <integer> | <null> Смещение от начала файла, по которому следует записать данные из buffer. Если position не является значением number, данные будут записаны в текущую позицию. Подробнее см. в документации POSIX pwrite(2). По умолчанию: null
  • Возвращает: <Promise>

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

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

  • bytesWritten <integer> количество записанных байтов
  • buffer <Buffer> | <TypedArray> | <DataView> ссылка на записанный buffer.

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

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

filehandle.write(buffer[, options])
Добавлено в: v18.3.0, v16.17.0
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <null> По умолчанию: null
  • Возвращает: <Promise>

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

Подобно описанной выше функции filehandle.write, эта версия принимает необязательный объект options. Если объект options не указан, используются значения по умолчанию, описанные выше.

filehandle.write(string[, position[, encoding]])
Добавлено в: v10.0.0
История
Версия Изменения
v14.0.0

Параметр string больше не преобразует неподдерживаемые входные данные в строки.

  • string <string>
  • position <integer> | <null> Смещение от начала файла, по которому должны быть записаны данные из string. Если position не является значением number, данные будут записаны в текущую позицию. Подробнее см. документацию POSIX по функции pwrite(2). По умолчанию: null
  • encoding <string> Ожидаемая кодировка строки. По умолчанию: 'utf8'
  • Возвращает: <Promise>

Записывает string в файл. Если string не является строкой, промис будет отклонён с ошибкой.

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

  • bytesWritten <integer> количество записанных байтов
  • buffer <string> ссылка на записанное значение string.

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

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

filehandle.writeFile(data, options)
Добавлено в: v10.0.0
История
Версия Изменения
v15.14.0, v14.18.0

Аргумент data поддерживает AsyncIterable, Iterable и Stream.

v14.0.0

Параметр data больше не преобразует неподдерживаемые входные данные в строки.

  • data <string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Stream>
  • options <Object> | <string>
    • encoding <string> | <null> Ожидаемая кодировка символов, если data является строкой. По умолчанию: 'utf8'
    • signal <AbortSignal> | <undefined> позволяет прервать выполняющуюся операцию writeFile. По умолчанию: undefined
  • Возвращает: <Promise>

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

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

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

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

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

filehandle.writev(buffers[, position])
Добавлено в: v12.9.0
  • buffers <Buffer[]> | <TypedArray[]> | <DataView[]>
  • position <integer> | <null> Смещение от начала файла, по которому должны быть записаны данные из buffers. Если position не является number, данные будут записаны в текущую позицию. По умолчанию: null
  • Возвращает: <Promise>

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

Промис разрешается объектом, содержащим два свойства:

  • bytesWritten <integer> количество записанных байтов
  • buffers <Buffer[]> | <TypedArray[]> | <DataView[]> ссылка на входные данные buffers.

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

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

filehandle.writer([options])
Добавлено в: v25.9.0

Стабильность: 1 — экспериментальный

  • options <Object>
    • autoClose <boolean> Закрывать файловый дескриптор после завершения работы средства записи или при ошибке. По умолчанию: false.
    • start <number> Смещение в байтах, с которого начинается запись. Если указано, запись выполняется с явным позиционированием. По умолчанию: текущая позиция в файле.
    • limit <number> Максимальное количество байтов, принимаемое средством записи. Асинхронные операции записи (write(), writev()), превышающие лимит, отклоняются с ERR_OUT_OF_RANGE. Синхронные операции записи (writeSync(), writevSync()) возвращают false. По умолчанию: без ограничений.
    • chunkSize <number> Максимальный размер блока в байтах для синхронных операций записи. Запись данных, превышающих этот порог, выполняется асинхронно. Для оптимальной производительности pipeTo() установите это значение равным chunkSize средства чтения. По умолчанию: 131072 (128 КБ).
  • Возвращает: <Object>
    • write(chunk[, options]) <Function> Возвращает <Promise>. Принимает Uint8Array, Buffer или строку (в кодировке UTF-8).
      • chunk <Buffer> | <TypedArray> | <DataView> | <string>
      • options <Object>
        • signal <AbortSignal> Если сигнал уже прерван, запись завершается отказом с AbortError без выполнения операций ввода-вывода.
    • writev(chunks[, options]) <Function> Возвращает <Promise>. Использует scatter/gather-ввод-вывод посредством одного системного вызова writev(). Принимает массивы, содержащие как Uint8Array, так и строки.
      • chunks <Buffer[]> | <TypedArray[]> | <DataView[]> | <string[]>
      • options <Object>
        • signal <AbortSignal> Если сигнал уже прерван, запись завершается отказом с AbortError без выполнения операций ввода-вывода.
    • writeSync(chunk) <Function> Возвращает <boolean>. Пытается выполнить синхронную запись. Возвращает true, если запись выполнена успешно, и false, если вызывающему коду следует перейти к асинхронной записи write(). Возвращает false, если: запись закрыта или находится в состоянии ошибки; выполняется асинхронная операция; размер фрагмента превышает chunkSize или запись превысит limit.
      • chunk <Buffer> | <TypedArray> | <DataView> | <string>
    • writevSync(chunks) <Function> Возвращает <boolean>. Синхронная пакетная запись. Семантика перехода к резервному варианту такая же, как у writeSync().
      • chunks <Buffer[]> | <TypedArray[]> | <DataView[]> | <string[]>
    • end([options]) <Function> Возвращает <Promise>, который выполняется с общим числом записанных байтов. Идемпотентен: возвращает totalBytesWritten, если запись уже закрыта, и возвращает ожидающий промис, если запись уже закрывается. Отклоняется, если запись находится в состоянии ошибки.
      • options <Object>
        • signal <AbortSignal> Если сигнал уже прерван, end() отклоняется с AbortError, а запись остается открытой.
    • endSync() <Function> Возвращает <number> | <number> — общее число записанных байтов при успехе; -1, если запись находится в состоянии ошибки или выполняется асинхронная операция. Идемпотентен, если запись уже закрыта.
    • fail(reason) <Function> Переводит запись в конечное состояние ошибки. Выполняется синхронно. Если запись уже закрыта или находится в состоянии ошибки, ничего не делает. Если autoClose имеет значение true, синхронно закрывает файловый дескриптор.

Возвращает записывающий поток node:stream/iter, использующий этот файловый дескриптор.

Запись поддерживает как Symbol.asyncDispose, так и Symbol.dispose:

  • await using w = fh.writer() — если запись все еще открыта (вызов end() еще не выполнен), asyncDispose вызывает fail(). Если end() ожидает завершения, он дожидается этого.
  • using w = fh.writer() — безусловно вызывает fail().

Методы writeSync() и writevSync() обеспечивают быстрый путь try-sync, используемый в stream/iter pipeTo(). Если размер фрагмента читателя совпадает с chunkSize записывающего потока, все операции записи в конвейере pipeTo() завершаются синхронно, без затрат на промисы.

Эта функция доступна только при включенном флаге --experimental-stream-iter.

Модули JavaScript
import { open } from 'node:fs/promises';
import { from, pipeTo } from 'node:stream/iter';
import { compressGzip } from 'node:zlib/iter';

// Async pipeline
const fh = await open('output.gz', 'w');
await pipeTo(from('Hello!'), compressGzip(), fh.writer({ autoClose: true }));

// Sync pipeline with limit
const src = await open('input.txt', 'r');
const dst = await open('output.txt', 'w');
const w = dst.writer({ limit: 1024 * 1024 }); // Max 1 MB
await pipeTo(src.pull({ autoClose: true }), w);
await w.end();
await dst.close();
CommonJS
const { open } = require('node:fs/promises');
const { from, pipeTo } = require('node:stream/iter');
const { compressGzip } = require('node:zlib/iter');

async function run() {
  // Async pipeline
  const fh = await open('output.gz', 'w');
  await pipeTo(from('Hello!'), compressGzip(), fh.writer({ autoClose: true }));

  // Sync pipeline with limit
  const src = await open('input.txt', 'r');
  const dst = await open('output.txt', 'w');
  const w = dst.writer({ limit: 1024 * 1024 }); // Max 1 MB
  await pipeTo(src.pull({ autoClose: true }), w);
  await w.end();
  await dst.close();
}

run().catch(console.error);
filehandle[Symbol.asyncDispose]()
Добавлено в: v20.4.0, v18.18.0
История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

Вызывает filehandle.close() и возвращает промис, который выполняется после закрытия дескриптора файла.

fsPromises.access(path[, mode])

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • mode <integer> По умолчанию: fs.constants.F_OK
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

Проверяет разрешения пользователя для файла или каталога, указанного в 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 см. в разделе Константы доступа к файлам.

Если проверка доступности выполнена успешно, промис выполняется без значения. Если какая-либо проверка доступности завершается неудачно, промис отклоняется с объектом <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');
}
mjscopy

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

fsPromises.appendFile(path, data[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v21.1.0, v20.10.0

Теперь поддерживается параметр flush.

  • path <string> | <Buffer> | <URL> | <FileHandle> имя файла или <FileHandle>
  • data <string> | <Buffer>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'a'.
    • flush <boolean> Если true, базовый файловый дескриптор сбрасывается перед закрытием. По умолчанию: false.
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

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

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

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

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

fsPromises.chmod(path, mode)

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • mode <string> | <integer>
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

Изменяет разрешения файла.

fsPromises.chown(path, uid, gid)

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

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

fsPromises.copyFile(src, dest[, mode])

Добавлено в: v10.0.0
История
Версия Изменения
v14.0.0

Аргумент flags заменён на mode, а проверка типа стала строже.

  • src <string> | <Buffer> | <URL> имя исходного файла для копирования
  • dest <string> | <Buffer> | <URL> имя файла назначения для операции копирования
  • mode <integer> Необязательные модификаторы, задающие поведение операции копирования. Можно создать маску, объединив побитовой операцией ИЛИ два или более значений (например, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE) По умолчанию: 0.
    • fs.constants.COPYFILE_EXCL: операция копирования завершится ошибкой, если dest уже существует.
    • fs.constants.COPYFILE_FICLONE: при выполнении операции копирования будет предпринята попытка создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, будет использован резервный механизм копирования.
    • fs.constants.COPYFILE_FICLONE_FORCE: при выполнении операции копирования будет предпринята попытка создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, операция завершится ошибкой.
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

Асинхронно копирует 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');
}
mjscopy

fsPromises.cp(src, dest[, options])

Добавлено в: v16.7.0
История
Версия Изменения
v22.3.0

Этот API больше не является экспериментальным.

v20.1.0, v18.17.0

Принимает дополнительный параметр mode для указания поведения копирования в качестве аргумента mode функции fs.copyFile().

v17.6.0, v16.15.0

Принимает дополнительный параметр verbatimSymlinks, указывающий, следует ли выполнять разрешение путей для символических ссылок.

  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения для копирования.
  • options <Object>
    • dereference <boolean> разыменовывать символические ссылки. По умолчанию: false.
    • errorOnExist <boolean> если force имеет значение false и путь назначения существует, выбрасывать ошибку. По умолчанию: false.
    • filter <Function> Функция для фильтрации копируемых файлов и каталогов. Возвращает true, чтобы скопировать элемент, и false, чтобы пропустить его. При пропуске каталога пропускается и всё его содержимое. Также может возвращать Promise, который разрешается в true или false. По умолчанию: undefined.
      • src <string> исходный путь для копирования.
      • dest <string> путь назначения для копирования.
      • Возвращает: <boolean> | <Promise> Значение, приводимое к boolean, или Promise, который выполняется с таким значением.
    • force <boolean> перезаписывать существующий файл или каталог. Если установить значение false и путь назначения существует, операция копирования будет игнорировать ошибки. Используйте параметр errorOnExist, чтобы изменить это поведение. По умолчанию: true.
    • mode <integer> модификаторы операции копирования. По умолчанию: 0. См. флаг mode параметра fsPromises.copyFile().
    • preserveTimestamps <boolean> Если включено true, временные метки из src будут сохранены. По умолчанию: false.
    • recursive <boolean> рекурсивно копировать каталоги. По умолчанию: false
    • verbatimSymlinks <boolean> Если включено true, разрешение путей для символических ссылок будет пропущено. По умолчанию: false
  • Возвращает: <Promise> Выполняется с результатом undefined в случае успеха.

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

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

fsPromises.glob(pattern[, options])

Добавлено в: v22.0.0
История
Версия Изменения
v26.1.0

Добавлена поддержка параметра followSymlinks.

v24.1.0, v22.17.0

Добавлена поддержка экземпляров URL для параметра cwd.

v24.0.0, v22.17.0

API объявлен стабильным.

v23.7.0, v22.14.0

Добавлена поддержка параметра exclude, принимающего шаблоны glob.

v22.2.0

Добавлена поддержка withFileTypes в качестве параметра.

  • pattern <string> | <string[]>
  • options <Object>
    • cwd <string> | <URL> текущий рабочий каталог. По умолчанию: process.cwd()
    • exclude <Function> | <string[]> Функция для фильтрации файлов/каталогов или список шаблонов glob, которые нужно исключить. Если указана функция, верните true, чтобы исключить элемент, или false, чтобы включить его. По умолчанию: undefined. Если указан массив строк, каждая строка должна быть шаблоном glob, задающим пути для исключения. Примечание: шаблоны отрицания (например, '!foo.js') не поддерживаются.
    • followSymlinks <boolean> Если true, при раскрытии шаблонов ** выполняется переход по символьным ссылкам на каталоги. По умолчанию: false.
    • withFileTypes <boolean> true, если glob должен возвращать пути в виде Dirent, и false в противном случае. По умолчанию: false.
  • Возвращает: <AsyncIterator> AsyncIterator, выдающий пути к файлам, соответствующим шаблону.

Если включен followSymlinks, обнаруженные циклы символьных ссылок не обходятся рекурсивно.

Модули JavaScript
import { glob } from 'node:fs/promises';

for await (const entry of glob('**/*.js'))
  console.log(entry);
CommonJS
const { glob } = require('node:fs/promises');

(async () => {
  for await (const entry of glob('**/*.js'))
    console.log(entry);
})();

fsPromises.lchmod(path, mode)

Устарел в: v10.0.0

Стабильность: 0 — устаревший

  • path <string> | <Buffer> | <URL>
  • mode <integer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом undefined.

Изменяет разрешения символьной ссылки.

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

fsPromises.lchown(path, uid, gid)

Добавлено в: v10.0.0
История
Версия Изменения
v10.6.0

Этот API больше не является устаревшим.

  • path <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом undefined.

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

fsPromises.lutimes(path, atime, mtime)

Добавлено в: v14.5.0, v12.19.0
  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • Возвращает: <Promise> В случае успеха выполняется с результатом undefined.

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

fsPromises.link(existingPath, newPath)

Добавлено в: v10.0.0
  • existingPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

Создаёт новую ссылку из existingPath на newPath. Подробнее см. документацию POSIX link(2).

fsPromises.lstat(path[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v10.5.0

Принимает дополнительный объект options для указания, должны ли возвращаемые числовые значения быть типа bigint.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Определяет, должны ли числовые значения в возвращаемом объекте <fs.Stats> быть типа bigint. По умолчанию: false.
  • Возвращает: <Promise> При успешном выполнении возвращает объект <fs.Stats> для указанной символической ссылки path.

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

fsPromises.mkdir(path[, options])

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • options <Object> | <integer>
    • recursive <boolean> По умолчанию: false
    • mode <string> | <integer> Не поддерживается в Windows. Подробнее см. раздел Режимы доступа к файлам. По умолчанию: 0o777.
  • Возвращает: <Promise> При успешном выполнении возвращает undefined, если recursive имеет значение false, или путь к первому созданному каталогу, если recursive имеет значение true.

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

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

Модули JavaScript
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);
}
CommonJS
const { mkdir } = require('node:fs/promises');
const { join } = require('node:path');

async function makeDirectory() {
  const projectFolder = join(__dirname, 'test', 'project');
  const dirCreation = await mkdir(projectFolder, { recursive: true });

  console.log(dirCreation);
  return dirCreation;
}

makeDirectory().catch(console.error);

fsPromises.mkdtemp(prefix[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v20.6.0, v18.19.0

Параметр prefix теперь принимает буферы и URL.

v16.5.0, v14.18.0

Параметр prefix теперь принимает пустую строку.

  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <Promise> Выполняется со строкой, содержащей путь в файловой системе к только что созданному временному каталогу.

Создает уникальный временный каталог. Уникальное имя каталога генерируется путем добавления шести случайных символов в конец указанного 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);
}
mjscopy

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

fsPromises.mkdtempDisposable(prefix[, options])

Добавлено в: v24.4.0
  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <Promise> Выполняется с Promise, содержащим асинхронно освобождаемый объект:
    • path <string> Путь к созданному каталогу.
    • remove <AsyncFunction> Функция, удаляющая созданный каталог.
    • [Symbol.asyncDispose] <AsyncFunction> То же, что и remove.

Результирующий Promise содержит асинхронно освобождаемый объект, свойство path которого содержит путь к созданному каталогу. При освобождении объекта каталог и его содержимое будут удалены асинхронно, если они все еще существуют. Если удалить каталог не удастся, при освобождении будет выброшена ошибка. У объекта есть асинхронный метод remove(), выполняющий ту же задачу.

Эта функция и функция освобождения результирующего объекта являются асинхронными, поэтому их следует использовать с await + await using, как в await using dir = await fsPromises.mkdtempDisposable('prefix').

Подробные сведения см. в документации к fsPromises.mkdtemp().

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

fsPromises.open(path, flags[, mode])

Добавлено в: v10.0.0
История
Версия Изменения
v11.1.0

Аргумент flags теперь необязательный, а его значение по умолчанию — 'r'.

  • path <string> | <Buffer> | <URL>
  • flags <string> | <number> См. сведения о поддержке flags файловой системой. По умолчанию: 'r'.
  • mode <string> | <integer> Задает режим файла (права доступа и биты sticky), если файл создается. Подробнее см. в разделе Режимы файлов. По умолчанию: 0o666 (доступен для чтения и записи)
  • Возвращает: <Promise> Выполняется с объектом <FileHandle>.

Открывает <FileHandle>.

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

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

fsPromises.opendir(path[, options])

Добавлено в: v12.12.0
История
Версия Изменения
v20.1.0, v18.17.0

Добавлен параметр recursive.

v13.1.0, v12.16.0

Добавлен параметр bufferSize.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • bufferSize <number> Количество записей каталога, которые буферизуются во внутренней памяти при чтении каталога. Более высокие значения повышают производительность, но увеличивают потребление памяти. По умолчанию: 32
    • recursive <boolean> Разрешенный Dir будет объектом <AsyncIterable>, содержащим все вложенные файлы и каталоги. По умолчанию: false
  • Возвращает: <Promise> Выполняется с объектом <fs.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);
}
mjscopy

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

fsPromises.readdir(path[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v20.1.0, v18.17.0

Добавлен параметр recursive.

v10.11.0

Добавлен новый параметр withFileTypes.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
    • withFileTypes <boolean> По умолчанию: false
    • recursive <boolean> Если true, рекурсивно читает содержимое каталога. В рекурсивном режиме будут перечислены все файлы, вложенные файлы и каталоги. По умолчанию: false.
  • Возвращает: <Promise> Выполняется с массивом имен файлов в каталоге, за исключением '.' и '..'.

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

Необязательный аргумент 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);
}
mjscopy

fsPromises.readFile(path[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v15.2.0, v14.17.0

Аргумент options может включать AbortSignal для отмены выполняющегося запроса readFile.

  • path <string> | <Buffer> | <URL> | <FileHandle> имя файла или FileHandle
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: null
    • flag <string> См. поддержку flags файловой системы. По умолчанию: 'r'.
    • signal <AbortSignal> позволяет отменить выполняющийся вызов readFile
  • Возвращает: <Promise> Выполняется с содержимым файла.

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

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

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

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

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

Модули JavaScript
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);
}
CommonJS
const { readFile } = require('node:fs/promises');
const { resolve } = require('node:path');
async function logFile() {
  try {
    const filePath = resolve('./package.json');
    const contents = await readFile(filePath, { encoding: 'utf8' });
    console.log(contents);
  } catch (err) {
    console.error(err.message);
  }
}
logFile();

Выполняющийся запрос 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);
}
mjscopy

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

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

fsPromises.readlink(path[, options])

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <Promise> При успешном выполнении разрешается значением linkString.

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

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

fsPromises.realpath(path[, options])

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <Promise> При успешном выполнении разрешается разрешённым путём.

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

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

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

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

fsPromises.rename(oldPath, newPath)

Добавлено в: v10.0.0
  • oldPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>
  • Возвращает: <Promise> При успешном выполнении разрешается значением undefined.

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

fsPromises.rmdir(path[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v25.0.0

Удалён параметр recursive.

v16.0.0

Использование fsPromises.rmdir(path, { recursive: true }) для path, являющегося файлом, больше не разрешено и приводит к ошибке ENOENT в Windows и ошибке ENOTDIR в POSIX.

v16.0.0

Использование fsPromises.rmdir(path, { recursive: true }) для path, который не существует, больше не разрешено и приводит к ошибке ENOENT.

v16.0.0

Параметр recursive объявлен устаревшим; его использование вызывает предупреждение об устаревании.

v14.14.0

Параметр recursive объявлен устаревшим, вместо него используйте fsPromises.rm.

v13.3.0, v12.16.0

Параметр maxBusyTries переименован в maxRetries, а его значение по умолчанию равно 0. Параметр emfileWait удалён, а для ошибок EMFILE используется та же логика повторных попыток, что и для других ошибок. Теперь поддерживается параметр retryDelay. Для ошибок ENFILE теперь выполняются повторные попытки.

v12.10.0

Теперь поддерживаются параметры recursive, maxBusyTries и emfileWait.

  • path <string> | <Buffer> | <URL>
  • options <Object> В настоящее время параметры не предоставляются. Ранее существовали параметры для recursive, maxBusyTries и emfileWait, но они были объявлены устаревшими и удалены. Аргумент options по-прежнему принимается для обратной совместимости, но не используется.
  • Возвращает: <Promise> В случае успеха выполняется с результатом undefined.

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

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

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

fsPromises.rm(path[, options])

Добавлено в: v14.14.0
  • path <string> | <Buffer> | <URL>
  • options <Object>
    • force <boolean> Если true, исключения будут игнорироваться, если path не существует. По умолчанию: false.
    • maxRetries <integer> При возникновении ошибки EBUSY, EMFILE, ENFILE, ENOTEMPTY или EPERM Node.js повторит операцию, каждый раз увеличивая время ожидания линейной задержки на retryDelay миллисекунд. Этот параметр задаёт количество повторных попыток. Он игнорируется, если параметр recursive не равен true. По умолчанию: 0.
    • recursive <boolean> Если true, выполняется рекурсивное удаление каталога. В рекурсивном режиме при сбое операции повторяются. По умолчанию: false.
    • retryDelay <integer> Время ожидания между повторными попытками в миллисекундах. Этот параметр игнорируется, если параметр recursive не равен true. По умолчанию: 100.
  • Возвращает: <Promise> В случае успеха выполняется с результатом undefined.

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

fsPromises.stat(path[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v25.7.0

Принимает параметр throwIfNoEntry, указывающий, следует ли выбрасывать исключение, если запись не существует.

v10.5.0

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

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Следует ли выбрасывать исключение, если запись файловой системы не существует, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <Promise> В случае успеха выполняется с объектом <fs.Stats> для указанного path.

fsPromises.statfs(path[, options])

Добавлено в: v19.6.0, v18.15.0
  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Следует ли преобразовать числовые значения в возвращаемом объекте <fs.StatFs> в bigint. По умолчанию: false.
  • Возвращает: <Promise> Результатом выполнения будет объект <fs.StatFs> для указанного path.

fsPromises.symlink(target, path[, type])

Добавлено в: v10.0.0
История
Версия Изменения
v19.0.0

Если аргумент type равен null или не указан, Node.js автоматически определит тип target и выберет dir или file.

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null
  • Возвращает: <Promise> При успешном выполнении результатом будет undefined.

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

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

fsPromises.truncate(path[, len])

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0
  • Возвращает: <Promise> При успешном выполнении результатом будет undefined.

Усекает (уменьшает или увеличивает длину) содержимое по адресу path до len байт.

fsPromises.unlink(path)

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • Возвращает: <Promise> При успешном выполнении результатом будет undefined.

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

fsPromises.utimes(path, atime, mtime)

Добавлено в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • Возвращает: <Promise> При успешном выполнении результатом будет undefined.

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

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

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

fsPromises.watch(filename[, options])

Добавлено в: v15.9.0, v14.18.0
  • filename <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • persistent <boolean> Указывает, должен ли процесс продолжать работу, пока отслеживаются файлы. По умолчанию: true.
    • recursive <boolean> Указывает, следует ли отслеживать все подкаталоги или только текущий каталог. Применяется, когда указан каталог, и только на поддерживаемых платформах (см. предостережения). По умолчанию: false.
    • encoding <string> Указывает кодировку символов для имени файла, передаваемого слушателю. По умолчанию: 'utf8'.
    • signal <AbortSignal> Объект <AbortSignal>, используемый для подачи сигнала об остановке наблюдателя.
    • maxQueue <number> Указывает количество событий, помещаемых в очередь между итерациями возвращаемого <AsyncIterator>. По умолчанию: 2048.
    • overflow <string> Либо 'ignore', либо 'throw', если количество событий, помещаемых в очередь, превышает ограничение maxQueue. Значение 'ignore' означает, что избыточные события отбрасываются и выводится предупреждение, а 'throw' — что выбрасывается исключение. По умолчанию: 'ignore'.
    • ignore <string> | <RegExp> | <Function> | <Array> Шаблоны, которые нужно игнорировать. Строки являются шаблонами glob (с использованием minimatch), шаблоны RegExp проверяются на соответствие имени файла, а функции получают имя файла и возвращают true, если его нужно игнорировать. По умолчанию: undefined.
  • Возвращает: <AsyncIterator> объектов со свойствами:
    • eventType <string> Тип изменения
    • filename <string> | <Buffer> | <null> Имя изменённого файла.

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

const { watch } = require('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;
  }
})();
jscopy

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

Все предостережения, относящиеся к fs.watch(), также применяются к fsPromises.watch().

fsPromises.writeFile(file, data[, options])

Добавлено в: v10.0.0
История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v15.14.0, v14.18.0

Аргумент data поддерживает AsyncIterable, Iterable и Stream.

v15.2.0, v14.17.0

Аргумент options может содержать AbortSignal для прерывания выполняющегося запроса writeFile.

v14.0.0

Параметр data больше не преобразует неподдерживаемые входные данные в строки.

  • file <string> | <Buffer> | <URL> | <FileHandle> имя файла или FileHandle
  • data <string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Stream>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддержку flags файловой системы. По умолчанию: 'w'.
    • flush <boolean> Если все данные успешно записаны в файл и flush имеет значение true, для сброса данных используется filehandle.sync(). По умолчанию: false.
    • signal <AbortSignal> позволяет прервать выполняющуюся операцию writeFile
  • Возвращает: <Promise> При успешном выполнении разрешается значением undefined.

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

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

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

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

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

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

Как и 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);
}
mjscopy

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

fsPromises.constants

Добавлено в: v18.4.0, v16.17.0
  • Тип: <Object>

Возвращает объект, содержащий часто используемые константы для операций с файловой системой. Этот объект совпадает с fs.constants. Подробнее см. в разделе Константы FS.

API обратных вызовов

API обратных вызовов выполняют все операции асинхронно, не блокируя цикл событий, а по завершении или при ошибке вызывают функцию обратного вызова.

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

fs.access(path[, mode], callback)

Добавлено в: v0.11.15
История
Версия Изменения
v25.0.0

Константы fs.F_OK, fs.R_OK, fs.W_OK и fs.X_OK, которые непосредственно присутствовали в fs, удалены.

v20.8.0

Константы fs.F_OK, fs.R_OK, fs.W_OK и fs.X_OK, которые непосредственно присутствовали в fs, объявлены устаревшими.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v6.3.0

Константы, такие как fs.R_OK и т. д., которые непосредственно присутствовали в fs, были перенесены в fs.constants в рамках мягкого объявления устаревшими. Поэтому в Node.js < v6.3.0 используйте fs для доступа к этим константам или используйте, например, (fs.constants || fs).R_OK, чтобы обеспечить совместимость со всеми версиями.

  • path <string> | <Buffer> | <URL>
  • mode <integer> По умолчанию: fs.constants.F_OK
  • callback <Function>
    • err <Error>

Проверяет разрешения пользователя для файла или каталога, указанного в 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 см. в разделе Константы доступа к файлам.

Последний аргумент, callback, — это функция обратного вызова, которая вызывается с возможным аргументом ошибки. Если какая-либо из проверок доступности завершается неудачей, аргументом ошибки будет объект Error. В следующих примерах проверяется, существует ли package.json и доступен ли он для чтения или записи.

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

const file = 'package.json';

// Check if the file exists in the current directory.
access(file, constants.F_OK, (err) => {
  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
});

// Check if the file is readable.
access(file, constants.R_OK, (err) => {
  console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
});

// Check if the file is writable.
access(file, constants.W_OK, (err) => {
  console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
});

// Check if the file is readable and writable.
access(file, constants.R_OK | constants.W_OK, (err) => {
  console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`);
});
mjscopy

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

запись (НЕ РЕКОМЕНДУЕТСЯ)

import { access, open, close } from 'node:fs';

access('myfile', (err) => {
  if (!err) {
    console.error('myfile already exists');
    return;
  }

  open('myfile', 'wx', (err, fd) => {
    if (err) throw err;

    try {
      writeMyData(fd);
    } finally {
      close(fd, (err) => {
        if (err) throw err;
      });
    }
  });
});
mjscopy

запись (РЕКОМЕНДУЕТСЯ)

import { open, close } from 'node:fs';

open('myfile', 'wx', (err, fd) => {
  if (err) {
    if (err.code === 'EEXIST') {
      console.error('myfile already exists');
      return;
    }

    throw err;
  }

  try {
    writeMyData(fd);
  } finally {
    close(fd, (err) => {
      if (err) throw err;
    });
  }
});
mjscopy

чтение (НЕ РЕКОМЕНДУЕТСЯ)

import { access, open, close } from 'node:fs';
access('myfile', (err) => {
  if (err) {
    if (err.code === 'ENOENT') {
      console.error('myfile does not exist');
      return;
    }

    throw err;
  }

  open('myfile', 'r', (err, fd) => {
    if (err) throw err;

    try {
      readMyData(fd);
    } finally {
      close(fd, (err) => {
        if (err) throw err;
      });
    }
  });
});
mjscopy

чтение (РЕКОМЕНДУЕТСЯ)

import { open, close } from 'node:fs';

open('myfile', 'r', (err, fd) => {
  if (err) {
    if (err.code === 'ENOENT') {
      console.error('myfile does not exist');
      return;
    }

    throw err;
  }

  try {
    readMyData(fd);
  } finally {
    close(fd, (err) => {
      if (err) throw err;
    });
  }
});
mjscopy

Приведённые выше примеры с пометкой «не рекомендуется» проверяют доступность файла, а затем используют его; примеры с пометкой «рекомендуется» лучше, поскольку они используют файл напрямую и обрабатывают возможную ошибку.

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

В Windows политики управления доступом (ACL) для каталога могут ограничивать доступ к файлу или каталогу. Однако функция fs.access() не проверяет ACL и поэтому может сообщить, что путь доступен, даже если ACL ограничивает пользователю возможность чтения или записи.

fs.appendFile(path, data[, options], callback)

Добавлено в: v0.6.7
История
Версия Изменения
v21.1.0, v20.10.0

Теперь поддерживается параметр flush.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v7.0.0

Переданный объект options никогда не будет изменен.

v5.0.0

Теперь параметр file может быть файловым дескриптором.

  • path <string> | <Buffer> | <URL> | <number> имя файла или файловый дескриптор
  • data <string> | <Buffer>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'a'.
    • flush <boolean> Если значение true равно false, перед закрытием базовый файловый дескриптор сбрасывается.
  • callback <Function>
    • err <Error>

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

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

import { appendFile } from 'node:fs';

appendFile('message.txt', 'data to append', (err) => {
  if (err) throw err;
  console.log('The "data to append" was appended to file!');
});
mjscopy

Если options является строкой, она задает кодировку:

import { appendFile } from 'node:fs';

appendFile('message.txt', 'data to append', 'utf8', callback);
mjscopy

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

import { open, close, appendFile } from 'node:fs';

function closeFd(fd) {
  close(fd, (err) => {
    if (err) throw err;
  });
}

open('message.txt', 'a', (err, fd) => {
  if (err) throw err;

  try {
    appendFile(fd, 'data to append', 'utf8', (err) => {
      closeFd(fd);
      if (err) throw err;
    });
  } catch (err) {
    closeFd(fd);
    throw err;
  }
});
mjscopy

fs.chmod(path, mode, callback)

Добавлено в: v0.1.30
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.6.0

В качестве параметра path теперь можно передать объект WHATWG URL с протоколом file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • mode <string> | <integer>
  • callback <Function>
    • err <Error>

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

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

import { chmod } from 'node:fs';

chmod('my_file.txt', 0o775, (err) => {
  if (err) throw err;
  console.log('The permissions for file "my_file.txt" have been changed!');
});
mjscopy
Режимы файлов

Аргумент mode, используемый в методах fs.chmod() и fs.chmodSync(), представляет собой числовую битовую маску, созданную с помощью логического ИЛИ следующих констант:

Константа Восьмеричное значение Описание
fs.constants.S_IRUSR 0o400 чтение владельцем
fs.constants.S_IWUSR 0o200 запись владельцем
fs.constants.S_IXUSR 0o100 выполнение/поиск владельцем
fs.constants.S_IRGRP 0o40 чтение группой
fs.constants.S_IWGRP 0o20 запись группой
fs.constants.S_IXGRP 0o10 выполнение/поиск группой
fs.constants.S_IROTH 0o4 чтение другими
fs.constants.S_IWOTH 0o2 запись другими
fs.constants.S_IXOTH 0o1 выполнение/поиск другими

Более простой способ задать mode — использовать последовательность из трёх восьмеричных цифр (например, 765). Крайняя левая цифра (7 в примере) задаёт разрешения владельца файла. Средняя цифра (6 в примере) задаёт разрешения группы. Крайняя правая цифра (5 в примере) задаёт разрешения для остальных.

Число Описание
7 чтение, запись и выполнение
6 чтение и запись
5 чтение и выполнение
4 только чтение
3 запись и выполнение
2 только запись
1 только выполнение
0 нет разрешений

Например, восьмеричное значение 0o765 означает:

  • Владелец может читать, записывать и выполнять файл.
  • Группа может читать и записывать файл.
  • Остальные могут читать и выполнять файл.

При использовании обычных чисел там, где ожидаются режимы файлов, любое значение больше 0o777 может привести к зависящему от платформы поведению, для которого не гарантируется единообразная работа. Поэтому такие константы, как S_ISVTX, S_ISGID или S_ISUID, не предоставляются в fs.constants.

Ограничения: в Windows можно изменить только разрешение на запись, а различия между разрешениями для группы, владельца и остальных не реализованы.

fs.chown(path, uid, gid, callback)

Добавлено в: v0.1.97
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>
  • callback <Function>
    • err <Error>

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

Дополнительные сведения см. в документации POSIX chown(2).

fs.close(fd[, callback])

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v15.9.0, v14.17.0

Теперь, если обратный вызов не указан, используется обратный вызов по умолчанию.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • callback <Function>
    • err <Error>

Закрывает файловый дескриптор. В функцию обратного вызова завершения передаются только возможное исключение и никаких других аргументов.

Вызов fs.close() для любого файлового дескриптора (fd), который в данный момент используется в другой операции fs, может привести к неопределённому поведению.

Дополнительные сведения см. в документации POSIX close(2).

fs.copyFile(src, dest[, mode], callback)

Добавлено в: v8.5.0
История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v14.0.0

Аргумент flags заменён на mode; введена более строгая проверка типа.

  • src <string> | <Buffer> | <URL> имя исходного файла для копирования
  • dest <string> | <Buffer> | <URL> имя файла назначения для операции копирования
  • mode <integer> модификаторы операции копирования. По умолчанию: 0.
  • callback <Function>
    • err <Error>

Асинхронно копирует src в dest. По умолчанию dest перезаписывается, если уже существует. Функции обратного вызова передаются только аргументы, связанные с возможной ошибкой. Node.js не гарантирует атомарность операции копирования. Если ошибка возникает после открытия файла назначения для записи, Node.js попытается удалить файл назначения.

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

  • fs.constants.COPYFILE_EXCL: операция копирования завершится ошибкой, если dest уже существует.
  • fs.constants.COPYFILE_FICLONE: операция копирования попытается создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, будет использован резервный механизм копирования.
  • fs.constants.COPYFILE_FICLONE_FORCE: операция копирования попытается создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, операция завершится ошибкой.
import { copyFile, constants } from 'node:fs';

function callback(err) {
  if (err) throw err;
  console.log('source.txt was copied to destination.txt');
}

// destination.txt will be created or overwritten by default.
copyFile('source.txt', 'destination.txt', callback);

// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback);
mjscopy

fs.cp(src, dest[, options], callback)

Добавлено в: v16.7.0
История
Версия Изменения
v22.3.0

Этот API больше не является экспериментальным.

v20.1.0, v18.17.0

Принимает дополнительную опцию mode, задающую поведение копирования в качестве аргумента mode для fs.copyFile().

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v17.6.0, v16.15.0

Принимает дополнительную опцию verbatimSymlinks, задающую, следует ли выполнять разрешение путей для символических ссылок.

  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения для копирования.
  • options <Object>
    • dereference <boolean> разыменовывать символические ссылки. По умолчанию: false.
    • errorOnExist <boolean> если force имеет значение false, а путь назначения существует, вызывать ошибку. По умолчанию: false.
    • filter <Function> Функция для фильтрации копируемых файлов и каталогов. Возвращает true, чтобы скопировать элемент, или false, чтобы пропустить его. При пропуске каталога пропускается и всё его содержимое. Также может возвращать Promise, выполняющийся с результатом true или false. По умолчанию: undefined.
      • src <string> исходный путь для копирования.
      • dest <string> путь назначения для копирования.
      • Возвращает: <boolean> | <Promise> Значение, приводимое к boolean, или Promise, выполняющийся с таким значением.
    • force <boolean> перезаписывать существующий файл или каталог. Если задать значение false и путь назначения существует, операция копирования будет игнорировать ошибки. Используйте опцию errorOnExist, чтобы изменить это поведение. По умолчанию: true.
    • mode <integer> модификаторы для операции копирования. По умолчанию: 0. См. флаг mode у fs.copyFile().
    • preserveTimestamps <boolean> Если true, временные метки из src будут сохранены. По умолчанию: false.
    • recursive <boolean> рекурсивно копировать каталоги По умолчанию: false
    • verbatimSymlinks <boolean> Если true, разрешение путей для символических ссылок будет пропущено. По умолчанию: false
  • callback <Function>
    • err <Error>

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

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

fs.createReadStream(path[, options])

Добавлено в: v0.1.31
История
Версия Изменения
v16.10.0

Для параметра fs не требуется метод open, если был указан fd.

v16.10.0

Для параметра fs не требуется метод close, если autoClose имеет значение false.

v15.5.0

Добавлена поддержка AbortSignal.

v15.4.0

Параметр fd принимает аргументы FileHandle.

v14.0.0

Значение по умолчанию для emitClose изменено на true.

v13.6.0, v12.17.0

Параметры fs позволяют переопределить используемую реализацию fs.

v12.10.0

Добавлен параметр emitClose.

v11.0.0

Введены новые ограничения для start и end; в случаях, когда мы не можем корректно обработать входные значения, теперь выдаются более подходящие ошибки.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Переданный объект options никогда не будет изменён.

v2.3.0

Теперь переданный объект options может быть строкой.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • flags <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'r'.
    • encoding <string> По умолчанию: null
    • fd <integer> | <FileHandle> По умолчанию: null
    • mode <integer> По умолчанию: 0o666
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <integer>
    • end <integer> По умолчанию: Infinity
    • highWaterMark <integer> По умолчанию: 64 * 1024
    • fs <Object> | <null> По умолчанию: null
    • signal <AbortSignal> | <null> По умолчанию: null
  • Возвращает: <fs.ReadStream>

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

Если указан fd, ReadStream проигнорирует аргумент path и будет использовать указанный файловый дескриптор. Это означает, что событие 'open' не будет сгенерировано. fd должен работать в блокирующем режиме; fd, работающие в неблокирующем режиме, следует передавать в <net.Socket>.

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

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

С помощью параметра fs можно переопределить соответствующие реализации fs для open, read и close. При указании параметра fs необходимо переопределить read. Если fd не указан, также необходимо переопределить open. Если autoClose имеет значение true, также необходимо переопределить close.

import { createReadStream } from 'node:fs';

// Create a stream from some character device.
const stream = createReadStream('/dev/input/event0');
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);
mjscopy

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

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

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

import { createReadStream } from 'node:fs';

createReadStream('sample.txt', { start: 90, end: 99 });
mjscopy

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

fs.createWriteStream(path[, options])

Добавлено в: v0.1.31
История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v16.10.0

Для параметра fs не требуется метод open, если указан fd.

v16.10.0

Для параметра fs не требуется метод close, если autoClose равен false.

v15.5.0

Добавлена поддержка AbortSignal.

v15.4.0

Параметр fd принимает аргументы FileHandle.

v14.0.0

Значение emitClose по умолчанию изменено на true.

v13.6.0, v12.17.0

Параметры fs позволяют переопределять используемую реализацию fs.

v12.10.0

Включен параметр emitClose.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Переданный объект options никогда не будет изменен.

v5.5.0

Теперь поддерживается параметр autoClose.

v2.3.0

Теперь переданный объект options может быть строкой.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • flags <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'w'.
    • encoding <string> По умолчанию: 'utf8'
    • fd <integer> | <FileHandle> По умолчанию: null
    • mode <integer> По умолчанию: 0o666
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <integer>
    • fs <Object> | <null> По умолчанию: null
    • signal <AbortSignal> | <null> По умолчанию: null
    • highWaterMark <number> По умолчанию: 16384
    • flush <boolean> Если true, базовый файловый дескриптор сбрасывается перед его закрытием. По умолчанию: false.
  • Возвращает: <fs.WriteStream>

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

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

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

С помощью параметра fs можно переопределить соответствующие реализации fs для open, write, writev и close. Переопределение write() без writev() может снизить производительность, поскольку некоторые оптимизации (_writev()) будут отключены. При указании параметра fs требуется переопределить как минимум один из write и writev. Если параметр fd не задан, также требуется переопределение open. Если autoClose равен true, также требуется переопределение close.

Как и <fs.ReadStream>, если указан fd, <fs.WriteStream> проигнорирует аргумент path и будет использовать указанный файловый дескриптор. Это означает, что событие 'open' генерироваться не будет. fd должен быть блокирующим; неблокирующие fd следует передавать в <net.Socket>.

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

fs.exists(path, callback)

Добавлено в: v0.0.2Устарело в: v1.0.0
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

Стабильность: 0 — Устарело: вместо этого используйте fs.stat() или fs.access().

  • path <string> | <Buffer> | <URL>
  • callback <Function>
    • exists <boolean>

Проверяет существование элемента по указанному адресу path с помощью файловой системы. Затем вызывает аргумент callback, передавая ему true или false:

import { exists } from 'node:fs';

exists('/etc/passwd', (e) => {
  console.log(e ? 'it exists' : 'no passwd!');
});
mjscopy

Параметры этого обратного вызова отличаются от параметров других обратных вызовов Node.js. Обычно первый параметр обратного вызова Node.js — это параметр err, за которым могут следовать другие параметры. Обратный вызов fs.exists() имеет только один логический параметр. Это одна из причин, по которой вместо fs.exists() рекомендуется использовать fs.access().

Если path является символической ссылкой, она обрабатывается. Поэтому, если path существует, но указывает на несуществующий элемент, обратный вызов получит значение false.

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

запись (НЕ РЕКОМЕНДУЕТСЯ)

import { exists, open, close } from 'node:fs';

exists('myfile', (e) => {
  if (e) {
    console.error('myfile already exists');
  } else {
    open('myfile', 'wx', (err, fd) => {
      if (err) throw err;

      try {
        writeMyData(fd);
      } finally {
        close(fd, (err) => {
          if (err) throw err;
        });
      }
    });
  }
});
mjscopy

запись (РЕКОМЕНДУЕТСЯ)

import { open, close } from 'node:fs';
open('myfile', 'wx', (err, fd) => {
  if (err) {
    if (err.code === 'EEXIST') {
      console.error('myfile already exists');
      return;
    }

    throw err;
  }

  try {
    writeMyData(fd);
  } finally {
    close(fd, (err) => {
      if (err) throw err;
    });
  }
});
mjscopy

чтение (НЕ РЕКОМЕНДУЕТСЯ)

import { open, close, exists } from 'node:fs';

exists('myfile', (e) => {
  if (e) {
    open('myfile', 'r', (err, fd) => {
      if (err) throw err;

      try {
        readMyData(fd);
      } finally {
        close(fd, (err) => {
          if (err) throw err;
        });
      }
    });
  } else {
    console.error('myfile does not exist');
  }
});
mjscopy

чтение (РЕКОМЕНДУЕТСЯ)

import { open, close } from 'node:fs';

open('myfile', 'r', (err, fd) => {
  if (err) {
    if (err.code === 'ENOENT') {
      console.error('myfile does not exist');
      return;
    }

    throw err;
  }

  try {
    readMyData(fd);
  } finally {
    close(fd, (err) => {
      if (err) throw err;
    });
  }
});
mjscopy

В приведённых выше примерах «не рекомендуется» сначала проверяется существование файла, а затем файл используется; примеры «рекомендуется» лучше, поскольку в них файл используется напрямую, а возможная ошибка обрабатывается.

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

fs.fchmod(fd, mode, callback)

Добавлено в: v0.4.7
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • mode <string> | <integer>
  • callback <Function>
    • err <Error>

Устанавливает разрешения для файла. В обратный вызов завершения передаются только возможная ошибка и никаких других аргументов.

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

fs.fchown(fd, uid, gid, callback)

Добавлено в: v0.4.7
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • uid <integer>
  • gid <integer>
  • callback <Function>
    • err <Error>

Устанавливает владельца файла. В обратный вызов завершения передаются только возможная ошибка и никаких других аргументов.

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

fs.fdatasync(fd, callback)

Добавлено в: v0.1.96
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • callback <Function>
    • err <Error>

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

fs.fstat(fd[, options], callback)

Добавлено в: v0.1.95
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.5.0

Принимает дополнительный объект options, указывающий, следует ли возвращать числовые значения в виде bigint.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • options <Object>
    • bigint <boolean> Определяет, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
  • callback <Function>
    • err <Error>
    • stats <fs.Stats>

Вызывает обратный вызов, передавая ему объект <fs.Stats> для дескриптора файла.

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

fs.fsync(fd, callback)

Добавлено в: v0.1.96
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • callback <Function>
    • err <Error>

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

fs.ftruncate(fd[, len], callback)

Добавлено в: v0.8.6
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • len <integer> По умолчанию: 0
  • callback <Function>
    • err <Error>

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

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

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

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

import { open, close, ftruncate } from 'node:fs';

function closeFd(fd) {
  close(fd, (err) => {
    if (err) throw err;
  });
}

open('temp.txt', 'r+', (err, fd) => {
  if (err) throw err;

  try {
    ftruncate(fd, 4, (err) => {
      closeFd(fd);
      if (err) throw err;
    });
  } catch (err) {
    closeFd(fd);
    if (err) throw err;
  }
});
mjscopy

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

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

fs.futimes(fd, atime, mtime, callback)

Добавлено в: v0.4.2
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v4.1.0

Числовые строки, NaN и Infinity теперь допускаются в качестве спецификаторов времени.

  • fd <integer>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • callback <Function>
    • err <Error>

Изменяет временные метки файловой системы объекта, на который указывает предоставленный файловый дескриптор. См. fs.utimes().

fs.glob(pattern[, options], callback)

Добавлено в: v22.0.0
История
Версия Изменения
v26.1.0

Добавлена поддержка параметра followSymlinks.

v24.1.0, v22.17.0

Добавлена поддержка экземпляров URL для параметра cwd.

v24.0.0, v22.17.0

API объявлен стабильным.

v23.7.0, v22.14.0

Добавлена поддержка параметра exclude с шаблонами glob.

v22.2.0

Добавлена поддержка withFileTypes в качестве параметра.

  • pattern <string> | <string[]>

  • options <Object>

    • cwd <string> | <URL> текущий рабочий каталог. По умолчанию: process.cwd()
    • exclude <Function> | <string[]> Функция для фильтрации файлов/каталогов или список шаблонов glob, которые нужно исключить. Если передана функция, верните true, чтобы исключить элемент, и false, чтобы включить его. По умолчанию: undefined.
    • followSymlinks <boolean> Если значение true, при раскрытии шаблонов ** выполняется переход по символическим ссылкам на каталоги. По умолчанию: false.
    • withFileTypes <boolean> true, если glob должен возвращать пути в виде Dirent, и false в противном случае. По умолчанию: false.
  • callback <Function>

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

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

Модули JavaScript
import { glob } from 'node:fs';

glob('**/*.js', (err, matches) => {
  if (err) throw err;
  console.log(matches);
});
CommonJS
const { glob } = require('node:fs');

glob('**/*.js', (err, matches) => {
  if (err) throw err;
  console.log(matches);
});

fs.lchmod(path, mode, callback)

Устарело с: v0.4.7
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v16.0.0

Возвращаемая ошибка может быть AggregateError, если возвращено несколько ошибок.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

Стабильность: 0 — устарело

  • path <string> | <Buffer> | <URL>
  • mode <integer>
  • callback <Function>
    • err <Error> | <AggregateError>

Изменяет разрешения символической ссылки. Обратному вызову завершения передаются только аргументы, кроме возможного исключения.

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

Дополнительные сведения см. в документации POSIX lchmod(2).

fs.lchown(path, uid, gid, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.6.0

Этот API больше не помечен как устаревший.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

v0.4.7

Устаревание отмечено только в документации.

  • path <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>
  • callback <Function>
    • err <Error>

Устанавливает владельца символической ссылки. В функцию обратного вызова завершения передаются только возможная ошибка и никакие другие аргументы.

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

fs.lutimes(path, atime, mtime, callback)

Добавлено в: v14.5.0, v12.19.0
История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • callback <Function>
    • err <Error>

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

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

fs.link(existingPath, newPath, callback)

Добавлено в: v0.1.31
История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.6.0

Параметры existingPath и newPath могут быть объектами WHATWG URL с использованием протокола file:. В настоящее время поддержка по-прежнему является экспериментальной.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • existingPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>
  • callback <Function>
    • err <Error>

Создает новую ссылку от existingPath к newPath. Подробную информацию см. в документации POSIX link(2). В функцию обратного вызова завершения передаются только возможная ошибка и никакие другие аргументы.

fs.lstat(path[, options], callback)

Добавлено в: v0.1.30
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.5.0

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

v10.0.0

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

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Определяет, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
  • callback <Function>
    • err <Error>
    • stats <fs.Stats>

Возвращает <fs.Stats> для символической ссылки, на которую указывает путь. Callback получает два аргумента (err, stats), где stats — объект <fs.Stats>. lstat() идентичен stat(), за исключением того, что если path является символической ссылкой, то сведения получаются о самой ссылке, а не о файле, на который она указывает.

Дополнительные сведения см. в документации POSIX для lstat(2).

fs.mkdir(path[, options], callback)

Добавлено в: v0.1.8
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v13.11.0, v12.17.0

В режиме recursive callback теперь получает в качестве аргумента первый созданный путь.

v10.12.0

Второй аргумент теперь может быть объектом options со свойствами recursive и mode.

v10.0.0

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

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • options <Object> | <integer>
    • recursive <boolean> По умолчанию: false
    • mode <string> | <integer> Не поддерживается в Windows. Дополнительные сведения см. в разделе Режимы доступа к файлам. По умолчанию: 0o777.
  • callback <Function>
    • err <Error>
    • path <string> | <undefined> Присутствует только в том случае, если каталог создан с параметром recursive, установленным в true.

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

Callback получает возможное исключение и, если recursive имеет значение true, путь к первому созданному каталогу, (err[, path]). Значение path по-прежнему может быть undefined, когда recursive имеет значение true, если каталог не был создан (например, если он уже существовал).

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

import { mkdir } from 'node:fs';

// Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist.
mkdir('./tmp/a/apple', { recursive: true }, (err) => {
  if (err) throw err;
});
mjscopy

В Windows использование fs.mkdir() для корневого каталога даже с рекурсивным созданием приведет к ошибке:

import { mkdir } from 'node:fs';

mkdir('/', { recursive: true }, (err) => {
  // => [Error: EPERM: operation not permitted, mkdir 'C:\']
});
mjscopy

Дополнительные сведения см. в документации POSIX для mkdir(2).

fs.mkdtemp(prefix[, options], callback)

Добавлено в: v5.10.0
История
Версия Изменения
v20.6.0, v18.19.0

Параметр prefix теперь принимает буферы и URL.

v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v16.5.0, v14.18.0

Параметр prefix теперь принимает пустую строку.

v10.0.0

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

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v6.2.1

Параметр callback теперь необязателен.

  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • directory <string>

Создает уникальный временный каталог.

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

Путь к созданному каталогу передается в виде строки во втором аргументе callback.

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

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

mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => {
  if (err) throw err;
  console.log(directory);
  // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
});
mjscopy

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

import { tmpdir } from 'node:os';
import { mkdtemp } from 'node:fs';

// The parent directory for the new temporary directory
const tmpDir = tmpdir();

// This method is *INCORRECT*:
mkdtemp(tmpDir, (err, directory) => {
  if (err) throw err;
  console.log(directory);
  // Will print something similar to `/tmpabc123`.
  // A new temporary directory is created at the file system root
  // rather than *within* the /tmp directory.
});

// This method is *CORRECT*:
import { sep } from 'node:path';
mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
  if (err) throw err;
  console.log(directory);
  // Will print something similar to `/tmp/abc123`.
  // A new temporary directory is created within
  // the /tmp directory.
});
mjscopy

fs.open(path[, flags[, mode]], callback)

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v11.1.0

Аргумент flags теперь необязателен и по умолчанию равен 'r'.

v9.9.0

Теперь поддерживаются флаги as и as+.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • flags <string> | <number> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'r'.
  • mode <string> | <integer> По умолчанию: 0o666 (для чтения и записи)
  • callback <Function>
    • err <Error>
    • fd <integer>

Асинхронное открытие файла. Подробнее см. документацию POSIX по open(2).

mode задает режим файла (права доступа и sticky-биты), но только если файл был создан. В Windows можно изменять только разрешение на запись; см. fs.chmod().

Callback получает два аргумента (err, fd).

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

Функции, основанные на fs.open(), также ведут себя таким образом: fs.writeFile(), fs.readFile() и т. д.

fs.openAsBlob(path[, options])

Добавлено в: v19.8.0
История
Версия Изменения
v24.0.0, v22.17.0

API объявлен стабильным.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • type <string> Необязательный MIME-тип для blob.
  • Возвращает: <Promise> При успешном выполнении возвращает <Blob>.

Возвращает <Blob>, данные которого хранятся в указанном файле.

После создания <Blob> файл нельзя изменять. Любые изменения приведут к тому, что чтение данных <Blob> завершится ошибкой DOMException. Для обнаружения изменений данных файла на диске при создании Blob и перед каждым чтением выполняются синхронные операции stat.

Модули JavaScript
import { openAsBlob } from 'node:fs';

const blob = await openAsBlob('the.file.txt');
const ab = await blob.arrayBuffer();
blob.stream();
CommonJS
const { openAsBlob } = require('node:fs');

(async () => {
  const blob = await openAsBlob('the.file.txt');
  const ab = await blob.arrayBuffer();
  blob.stream();
})();

fs.opendir(path[, options], callback)

Добавлено в: v12.12.0
История
Версия Изменения
v20.1.0, v18.17.0

Добавлена опция recursive.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь приводит к ошибке ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v13.1.0, v12.16.0

Добавлена опция bufferSize.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • bufferSize <number> Количество записей каталога, которые буферизуются во внутренней памяти при чтении каталога. Более высокие значения повышают производительность, но увеличивают потребление памяти. По умолчанию: 32
    • recursive <boolean> По умолчанию: false
  • callback <Function>
    • err <Error>
    • dir <fs.Dir>

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

Создаёт <fs.Dir>, содержащий все последующие функции для чтения содержимого каталога и очистки ресурсов.

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

fs.read(fd, buffer, offset, length, position, callback)

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.10.0

Параметр buffer теперь может иметь тип TypedArray или быть DataView.

v7.4.0

Параметр buffer теперь может быть Uint8Array.

v6.0.0

Параметр length теперь может быть 0.

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView> Буфер, в который будут записаны данные.
  • offset <integer> Позиция в buffer, в которую следует записать данные.
  • length <integer> Количество байтов для чтения.
  • position <integer> | <bigint> | <null> Указывает, с какого места в файле начать чтение. Если position равно null или -1 , данные будут прочитаны с текущей позиции в файле, а позиция в файле будет обновлена. Если position — неотрицательное целое число, позиция в файле останется неизменной.
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffer <Buffer>

Читает данные из файла, указанного в fd.

Обратному вызову передаются три аргумента: (err, bytesRead, buffer).

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

При вызове этого метода в версии, преобразованной с помощью util.promisify(), он возвращает промис для Object со свойствами bytesRead и buffer.

Метод fs.read() читает данные из файла, указанного дескриптором файла (fd). Аргумент length задаёт максимальное число байтов, которое Node.js попытается прочитать из ядра. Однако фактическое число прочитанных байтов (bytesRead) по разным причинам может быть меньше указанного значения length.

Например:

  • Если файл короче указанного значения length, для bytesRead будет установлено фактическое число прочитанных байтов.
  • Если в файле встретится EOF (конец файла) до заполнения буфера, Node.js прочитает все доступные байты до EOF, а параметр bytesRead в обратном вызове будет содержать фактическое число прочитанных байтов, которое может быть меньше указанного значения length.
  • Если файл находится в медленной сетевой filesystem или во время чтения возникнет другая проблема, значение bytesRead может быть меньше указанного значения length.

Поэтому при использовании fs.read() важно проверять значение bytesRead, чтобы определить, сколько байтов действительно было прочитано из файла. В зависимости от логики приложения может потребоваться обработать случаи, когда bytesRead меньше указанного значения length, например обернуть вызов чтения в цикл, если требуется прочитать не меньше определённого количества байтов.

Это поведение аналогично функции POSIX preadv2.

fs.read(fd[, options], callback)

Добавлено в: v13.11.0, v12.17.0
История
Версия Изменения
v13.11.0, v12.17.0

Объект параметров позволяет сделать необязательными buffer, offset, length и position.

  • fd <integer>
  • options <Object>
    • buffer <Buffer> | <TypedArray> | <DataView> По умолчанию: Buffer.alloc(16384)
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffer <Buffer>

Как и функция fs.read(), эта версия принимает необязательный объект options. Если объект options не указан, по умолчанию используются значения, приведённые выше.

fs.read(fd, buffer[, options], callback)

Добавлено в: v18.2.0, v16.17.0
  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView> Буфер, в который будут записаны данные.
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffer <Buffer>

Как и функция fs.read(), эта версия принимает необязательный объект options. Если объект options не указан, по умолчанию используются значения, приведённые выше.

fs.readdir(path[, options], callback)

Добавлено в: v0.1.8
История
Версия Изменения
v20.1.0, v18.17.0

Добавлена опция recursive.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.10.0

Добавлена новая опция withFileTypes.

v10.0.0

Параметр callback больше не является необязательным. Если его не передать, во время выполнения будет вызвана TypeError.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v6.0.0

Добавлен параметр options.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
    • withFileTypes <boolean> По умолчанию: false
    • recursive <boolean> Если true, содержимое каталога считывается рекурсивно. В рекурсивном режиме будут перечислены все файлы, вложенные файлы и каталоги. По умолчанию: false.
  • callback <Function>
    • err <Error>
    • files <string[]> | <Buffer[]> | <fs.Dirent[]>

Считывает содержимое каталога. Обратный вызов получает два аргумента (err, files), где files — это массив имен файлов в каталоге, за исключением '.' и '..'.

Дополнительные сведения см. в документации POSIX для readdir(3).

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

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

fs.readFile(path[, options], callback)

Добавлено в: v0.1.29
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v16.0.0

Возвращаемая ошибка может быть AggregateError, если возвращено несколько ошибок.

v15.2.0, v14.17.0

Аргумент options может включать AbortSignal для прерывания выполняющегося запроса readFile.

v10.0.0

Параметр callback больше не является необязательным. Если не передать его, во время выполнения будет вызвано TypeError.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Параметр callback больше не является необязательным. Если не передать его, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v5.1.0

В случае успеха callback всегда будет вызван с null в качестве параметра error.

v5.0.0

Теперь параметр path может быть файловым дескриптором.

  • path <string> | <Buffer> | <URL> | <integer> имя файла или файловый дескриптор
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: null
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'r'.
    • signal <AbortSignal> позволяет прервать выполняющуюся операцию readFile
  • callback <Function>
    • err <Error> | <AggregateError>
    • data <string> | <Buffer>

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

import { readFile } from 'node:fs';

readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
});
mjscopy

Callback получает два аргумента (err, data), где data — это содержимое файла.

Если кодировка не указана, возвращается исходный буфер.

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

import { readFile } from 'node:fs';

readFile('/etc/passwd', 'utf8', callback);
mjscopy

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

import { readFile } from 'node:fs';

// macOS, Linux, and Windows
readFile('<directory>', (err, data) => {
  // => [Error: EISDIR: illegal operation on a directory, read <directory>]
});

//  FreeBSD
readFile('<directory>', (err, data) => {
  // => null, <data>
});
mjscopy

Выполняющийся запрос можно прервать с помощью AbortSignal. При прерывании запроса callback вызывается с AbortError:

import { readFile } from 'node:fs';

const controller = new AbortController();
const signal = controller.signal;
readFile(fileInfo[0].name, { signal }, (err, buf) => {
  // ...
});
// When you want to abort the request
controller.abort();
mjscopy

Функция fs.readFile() буферизует весь файл целиком. Чтобы сократить затраты памяти, по возможности используйте потоковую передачу через fs.createReadStream().

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

Файловые дескрипторы
  1. Указанный файловый дескриптор должен поддерживать чтение.
  2. Если в качестве path указан файловый дескриптор, он не будет закрыт автоматически.
  3. Чтение начнётся с текущей позиции. Например, если файл уже содержал 'Hello World' и с помощью файлового дескриптора было прочитано шесть байтов, вызов fs.readFile() с тем же файловым дескриптором вернёт 'World', а не 'Hello World'.
Соображения производительности

Метод fs.readFile() асинхронно считывает содержимое файла в память по одному фрагменту за раз, позволяя циклу событий работать между чтениями фрагментов. Благодаря этому операция чтения меньше влияет на другие задачи, которые могут использовать пул потоков libuv, однако полное считывание файла в память занимает больше времени.

Дополнительные накладные расходы на чтение могут значительно различаться в разных системах и зависят от типа считываемого файла. Если файл не является обычным файлом (например, это канал) и Node.js не может определить его фактический размер, каждая операция чтения загрузит 64 KiB данных. Для обычных файлов при каждом чтении обрабатывается 512 KiB данных.

Если приложению необходимо считывать содержимое файла как можно быстрее, лучше напрямую использовать fs.read() и управлять считыванием всего содержимого файла в коде приложения.

В задаче Node.js на GitHub #25741 приведены дополнительные сведения и подробный анализ производительности fs.readFile() для файлов разных размеров в различных версиях Node.js.

fs.readlink(path[, options], callback)

Добавлено в: v0.1.31
История
Версия Изменения
v18.0.0

Передача недопустимого колбэка в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

Параметр callback больше не является необязательным. Если его не передать, во время выполнения будет вызвана TypeError.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • linkString <string> | <Buffer>

Читает содержимое символической ссылки, на которую указывает path. Колбэк получает два аргумента (err, linkString).

Дополнительные сведения см. в документации POSIX для readlink(2).

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

fs.readv(fd, buffers[, position], callback)

Добавлено в: v13.13.0, v12.17.0
История
Версия Изменения
v18.0.0

Передача недопустимого колбэка в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • fd <integer>
  • buffers {ArrayBufferView[]}
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffers {ArrayBufferView[]}

Читает данные из файла, указанного в fd, и записывает их в массив ArrayBufferView с помощью readv().

position — это смещение от начала файла, с которого следует читать данные. Если задано typeof position !== 'number', данные будут прочитаны с текущей позиции.

Колбэку будут переданы три аргумента: err, bytesRead и buffers. bytesRead — это количество байтов, прочитанных из файла.

Если вызвать этот метод в его версии, преобразованной с помощью util.promisify(), он возвращает промис для Object со свойствами bytesRead и buffers.

fs.realpath(path[, options], callback)

Добавлено в: v0.1.31
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v8.0.0

Добавлена поддержка разрешения путей Pipe/Socket.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v6.4.0

Вызов realpath снова работает для различных крайних случаев в Windows.

v6.0.0

Параметр cache удален.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • resolvedPath <string> | <Buffer>

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

Канонический путь не обязательно уникален. Жесткие ссылки и точки монтирования могут предоставлять доступ к объекту файловой системы по множеству путей.

Эта функция работает подобно realpath(3), за некоторыми исключениями:

  1. В файловых системах без учета регистра регистр символов не преобразуется.

  2. Максимальное число символических ссылок не зависит от платформы и, как правило, значительно превышает число, поддерживаемое собственной реализацией realpath(3).

Обратный вызов callback получает два аргумента (err, resolvedPath). Для разрешения относительных путей можно использовать process.cwd.

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

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

Если path разрешается в сокет или канал, функция вернет зависящее от системы имя этого объекта.

Для несуществующего пути возникает ошибка ENOENT. error.path — это абсолютный путь к файлу.

fs.realpath.native(path[, options], callback)

Добавлено в: v9.2.0
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • resolvedPath <string> | <Buffer>

Асинхронный вариант realpath(3).

Обратный вызов callback получает два аргумента (err, resolvedPath).

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

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

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

fs.rename(oldPath, newPath, callback)

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

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

v7.6.0

Параметры oldPath и newPath могут быть объектами WHATWG URL, использующими протокол file:. В настоящее время эта возможность всё ещё является экспериментальной.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • oldPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>
  • callback <Function>
    • err <Error>

Асинхронно переименовывает файл по пути oldPath в путь, указанный как newPath. Если newPath уже существует, он будет перезаписан. Если по пути newPath находится каталог, вместо этого будет выдана ошибка. В callback завершения передаются только аргументы, необходимые для возможного исключения.

См. также: rename(2).

import { rename } from 'node:fs';

rename('oldFile.txt', 'newFile.txt', (err) => {
  if (err) throw err;
  console.log('Rename complete!');
});
mjscopy

fs.rmdir(path[, options], callback)

Добавлено в: v0.0.2
История
Версия Изменения
v25.0.0

Удалён параметр recursive.

v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v16.0.0

Использование fs.rmdir(path, { recursive: true }) для path, являющегося файлом, больше не допускается и приводит к ошибке ENOENT в Windows и к ошибке ENOTDIR в POSIX.

v16.0.0

Использование fs.rmdir(path, { recursive: true }) для path, который не существует, больше не допускается и приводит к ошибке ENOENT.

v16.0.0

Параметр recursive устарел; его использование вызывает предупреждение об устаревании.

v14.14.0

Параметр recursive устарел; вместо него используйте fs.rm.

v13.3.0, v12.16.0

Параметр maxBusyTries переименован в maxRetries, его значение по умолчанию — 0. Параметр emfileWait удалён, а для ошибок EMFILE используется та же логика повторных попыток, что и для других ошибок. Теперь поддерживается параметр retryDelay. Для ошибок ENFILE теперь выполняются повторные попытки.

v12.10.0

Теперь поддерживаются параметры recursive, maxBusyTries и emfileWait.

v10.0.0

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

v7.6.0

Параметры path могут быть объектом WHATWG URL, использующим протокол file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • options <Object> В настоящее время нет доступных параметров. Ранее существовали параметры recursive, maxBusyTries и emfileWait, но они устарели и были удалены. Аргумент options по-прежнему принимается для обратной совместимости, но не используется.
  • callback <Function>
    • err <Error>

Асинхронно выполняет rmdir(2). В callback завершения передаются только аргументы, необходимые для возможного исключения.

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

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

fs.rm(path[, options], callback)

Добавлено в: v14.14.0
История
Версия Изменения
v17.3.0, v16.14.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • force <boolean> Если true, исключения будут игнорироваться, если path не существует. По умолчанию: false.
    • maxRetries <integer> При возникновении ошибки EBUSY, EMFILE, ENFILE, ENOTEMPTY или EPERM Node.js повторит операцию, увеличивая время ожидания при линейном экспоненциальном откате на retryDelay миллисекунд с каждой попыткой. Эта опция задаёт количество повторных попыток. Опция игнорируется, если опция recursive не равна true. По умолчанию: 0.
    • recursive <boolean> Если true, выполняется рекурсивное удаление. В рекурсивном режиме при сбое операции повторяются. По умолчанию: false.
    • retryDelay <integer> Время ожидания между повторными попытками в миллисекундах. Опция игнорируется, если опция recursive не равна true. По умолчанию: 100.
  • callback <Function>
    • err <Error>

Асинхронно удаляет файлы и каталоги (работа основана на стандартной утилите POSIX rm). Функция обратного вызова завершения получает аргументы только в случае возможного исключения.

fs.stat(path[, options], callback)

Добавлено в: v0.0.2
История
Версия Изменения
v25.7.0

Принимает опцию throwIfNoEntry, которая задаёт, следует ли выбрасывать исключение, если запись не существует.

v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.5.0

Принимает дополнительный объект options, задающий, должны ли возвращаемые числовые значения иметь тип bigint.

v10.0.0

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

v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Следует ли выбрасывать исключение, если запись в файловой системе отсутствует, вместо возврата undefined. По умолчанию: true.
  • callback <Function>
    • err <Error>
    • stats <fs.Stats>

Асинхронно выполняет stat(2). Функция обратного вызова получает два аргумента (err, stats), где stats — объект <fs.Stats>.

В случае ошибки err.code будет одной из распространённых системных ошибок.

fs.stat() следует по символическим ссылкам. Используйте fs.lstat(), чтобы получить информацию о самих ссылках.

Не рекомендуется использовать fs.stat() для проверки существования файла перед вызовом fs.open(), fs.readFile() или fs.writeFile(). Вместо этого пользовательскому коду следует напрямую открывать, читать или записывать файл и обрабатывать ошибку, возникающую, если файл недоступен.

Для проверки существования файла без последующих операций с ним рекомендуется использовать fs.access().

Например, при следующей структуре каталогов:

- txtDir
-- file.txt
- app.js
textcopy

Следующая программа проверит статистические данные для указанных путей:

import { stat } from 'node:fs';

const pathsToCheck = ['./txtDir', './txtDir/file.txt'];

for (let i = 0; i < pathsToCheck.length; i++) {
  stat(pathsToCheck[i], (err, stats) => {
    console.log(stats.isDirectory());
    console.log(stats);
  });
}
mjscopy

Результат будет выглядеть примерно так:

true
Stats {
  dev: 16777220,
  mode: 16877,
  nlink: 3,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214262,
  size: 96,
  blocks: 0,
  atimeMs: 1561174653071.963,
  mtimeMs: 1561174614583.3518,
  ctimeMs: 1561174626623.5366,
  birthtimeMs: 1561174126937.2893,
  atime: 2019-06-22T03:37:33.072Z,
  mtime: 2019-06-22T03:36:54.583Z,
  ctime: 2019-06-22T03:37:06.624Z,
  birthtime: 2019-06-22T03:28:46.937Z,
  atimeInstant: 2019-06-22T03:37:33.071963Z,
  mtimeInstant: 2019-06-22T03:36:54.5833518Z,
  ctimeInstant: 2019-06-22T03:37:06.6235366Z,
  birthtimeInstant: 2019-06-22T03:28:46.9372893Z
}
false
Stats {
  dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214074,
  size: 8,
  blocks: 8,
  atimeMs: 1561174616618.8555,
  mtimeMs: 1561174614584,
  ctimeMs: 1561174614583.8145,
  birthtimeMs: 1561174007710.7478,
  atime: 2019-06-22T03:36:56.619Z,
  mtime: 2019-06-22T03:36:54.584Z,
  ctime: 2019-06-22T03:36:54.584Z,
  birthtime: 2019-06-22T03:26:47.711Z,
  atimeInstant: 2019-06-22T03:36:56.6188555Z,
  mtimeInstant: 2019-06-22T03:36:54.584Z,
  ctimeInstant: 2019-06-22T03:36:54.5838145Z,
  birthtimeInstant: 2019-06-22T03:26:47.7107478Z
}
consolecopy

fs.statfs(path[, options], callback)

Добавлено в: v19.6.0, v18.15.0
  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Нужно ли преобразовать числовые значения в возвращаемом объекте <fs.StatFs> в bigint. По умолчанию: false.
  • callback <Function>
    • err <Error>
    • stats <fs.StatFs>

Асинхронный вызов statfs(2). Возвращает сведения о смонтированной файловой системе, содержащей path. Колбэк получает два аргумента (err, stats), где stats — это объект <fs.StatFs>.

В случае ошибки значение err.code будет одним из распространенных системных ошибок.

fs.symlink(target, path[, type], callback)

Добавлено в: v0.1.31
История
Версия Изменения
v18.0.0

Передача недопустимого колбэка в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v12.0.0

Если аргумент type не задан, Node автоматически определит тип target и выберет dir или file.

v7.6.0

Параметры target и path могут быть объектами WHATWG URL, использующими протокол file:. Поддержка пока остается экспериментальной.

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>

Создает ссылку с именем path, указывающую на target. В колбэк завершения передаются только аргументы, связанные с возможным исключением.

Дополнительные сведения см. в документации POSIX по symlink(2).

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

Относительные пути назначения отсчитываются от родительского каталога ссылки.

import { symlink } from 'node:fs';

symlink('./mew', './mewtwo', callback);
mjscopy

Приведенный выше пример создает символическую ссылку mewtwo, указывающую на mew в том же каталоге:

$ tree .
.
├── mew
└── mewtwo -> ./mew
bashcopy

fs.truncate(path[, len], callback)

Добавлено в: v0.8.6
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v16.0.0

Возвращённая ошибка может быть AggregateError, если возвращено более одной ошибки.

v10.0.0

Параметр callback больше не является необязательным. Если его не передать, во время выполнения будет вызвана TypeError.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0
  • callback <Function>
    • err <Error> | <AggregateError>

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

Модули JavaScript
import { truncate } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was truncated');
});
CommonJS
const { truncate } = require('node:fs');
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was truncated');
});

Передача файлового дескриптора устарела и в будущем может привести к возникновению ошибки.

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

fs.unlink(path, callback)

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

Параметр callback больше не является необязательным. Если его не передать, во время выполнения будет вызвана TypeError.

v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

  • path <string> | <Buffer> | <URL>
  • callback <Function>
    • err <Error>

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

import { unlink } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
unlink('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was deleted');
});
mjscopy

fs.unlink() не работает с каталогом, пустым или нет. Чтобы удалить каталог, используйте fs.rmdir().

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

fs.unwatchFile(filename[, listener])

Добавлено в: v0.1.31
  • filename <string> | <Buffer> | <URL>
  • listener <Function> Необязательный аргумент — ранее добавленный с помощью fs.watchFile() обработчик

Прекращает отслеживать изменения filename. Если указано listener, удаляется только этот обработчик. В противном случае удаляются все обработчики, и отслеживание filename фактически прекращается.

Вызов fs.unwatchFile() с именем файла, за изменениями которого не ведётся наблюдение, ничего не делает и не вызывает ошибку.

Использовать fs.watch() эффективнее, чем fs.watchFile() и fs.unwatchFile(). По возможности вместо fs.watchFile() и fs.unwatchFile() следует использовать fs.watch().

fs.utimes(path, atime, mtime, callback)

Добавлено в: v0.4.2
История
Версия Изменения
v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

Параметр callback больше не является необязательным. Если его не передать, во время выполнения будет вызвано TypeError.

v8.0.0

NaN, Infinity и -Infinity больше не являются допустимыми указателями времени.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v4.1.0

Строки с числовыми значениями, NaN и Infinity теперь являются допустимыми указателями времени.

  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • callback <Function>
    • err <Error>

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

Аргументы atime и mtime должны соответствовать следующим правилам:

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

fs.watch(filename[, options][, listener])

Добавлено в: v0.5.10
История
Версия Изменения
v26.1.0

Добавлен параметр throwIfNoEntry.

v19.1.0

Добавлена поддержка рекурсивного отслеживания в Linux, AIX и IBMi.

v15.9.0, v14.17.0

Добавлена поддержка закрытия наблюдателя с помощью AbortSignal.

v7.6.0

Параметр filename может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Переданный объект options никогда не будет изменен.

  • filename <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • persistent <boolean> Указывает, должен ли процесс продолжать работу, пока отслеживаются файлы. По умолчанию: true.
    • recursive <boolean> Указывает, следует ли отслеживать все подкаталоги или только текущий каталог. Применяется, если указан каталог, и только на поддерживаемых платформах (см. примечания). По умолчанию: false.
    • encoding <string> Задает кодировку символов для имени файла, передаваемого обработчику. По умолчанию: 'utf8'.
    • signal <AbortSignal> позволяет закрыть наблюдатель с помощью AbortSignal.
    • throwIfNoEntry <boolean> Указывает, следует ли выбрасывать исключение, если путь не существует. По умолчанию: true.
    • ignore <string> | <RegExp> | <Function> | <Array> Шаблон(ы), исключаемые из обработки. Строки являются glob-шаблонами (с использованием minimatch), шаблоны RegExp проверяются на соответствие имени файла, а функции получают имя файла и возвращают true, чтобы исключить его из обработки. По умолчанию: undefined.
  • listener <Function> | <undefined> По умолчанию: undefined
    • eventType <string>
    • filename <string> | <Buffer> | <null>
  • Возвращает: <fs.FSWatcher>

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

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

Функция обратного вызова обработчика получает два аргумента (eventType, filename). eventType — это либо 'rename', либо 'change', а filename — имя файла, вызвавшего событие.

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

Функция обратного вызова обработчика привязана к событию 'change', генерируемому <fs.FSWatcher>, но это не то же самое, что значение 'change' у eventType.

Если передан signal, прерывание соответствующего AbortController закроет возвращенный <fs.FSWatcher>.

Примечания

API fs.watch работает неодинаково на разных платформах и недоступен в некоторых ситуациях.

В Windows события не генерируются, если отслеживаемый каталог перемещен или переименован. При удалении отслеживаемого каталога сообщается об ошибке EPERM.

API fs.watch не обеспечивает защиту от вредоносных действий в файловой системе. Например, в Windows он реализован путем отслеживания изменений в каталоге, а не в отдельных файлах. Это позволяет подменить файл, после чего fs сообщает об изменениях в новом файле с тем же именем.

Доступность

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

  • В системах Linux используется inotify(7).
  • В системах BSD используется kqueue(2).
  • В macOS для файлов используется kqueue(2), а для каталогов — FSEvents.
  • В системах SunOS (включая Solaris и SmartOS) используется event ports.
  • В системах Windows эта функция зависит от ReadDirectoryChangesW.
  • В системах AIX эта функция зависит от AHAFS, который должен быть включён.
  • В системах IBM i эта функция не поддерживается.

Если по какой-либо причине базовая функциональность недоступна, fs.watch() не сможет работать и может вызвать исключение. Например, отслеживание файлов или каталогов может быть ненадёжным, а в некоторых случаях невозможным, в сетевых файловых системах (NFS, SMB и т. д.) или в файловых системах хоста при использовании программ виртуализации, таких как Vagrant или Docker.

По-прежнему можно использовать fs.watchFile(), который выполняет опрос с помощью stat, однако этот метод медленнее и менее надёжен.

Inode

В системах Linux и macOS fs.watch() определяет для пути inode и отслеживает его. Если отслеживаемый путь удалён и создан заново, ему назначается новый inode. Отслеживание выдаст событие удаления, но продолжит следить за исходным inode. События для нового inode выдаваться не будут. Это ожидаемое поведение.

В AIX файлы сохраняют тот же inode на протяжении всего срока существования. Сохранение и закрытие отслеживаемого файла в AIX приведёт к двум уведомлениям (одно — о добавлении нового содержимого, другое — об усечении файла).

Аргумент имени файла

Передача аргумента filename в функцию обратного вызова поддерживается только в Linux, macOS, Windows и AIX. Даже на поддерживаемых платформах наличие filename не всегда гарантируется. Поэтому не следует полагать, что аргумент filename всегда будет передан в функцию обратного вызова; предусмотрите запасную логику на случай, если он null.

import { watch } from 'node:fs';
watch('somedir', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
});
mjscopy

fs.watchFile(filename[, options], listener)

Добавлено в: v0.1.31
История
Версия Изменения
v10.5.0

Теперь поддерживается параметр bigint.

v7.6.0

Параметр filename может быть объектом WHATWG URL, использующим протокол file:.

  • filename <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> По умолчанию: false
    • persistent <boolean> По умолчанию: true
    • interval <integer> По умолчанию: 5007
  • listener <Function>
    • current <fs.Stats>
    • previous <fs.Stats>
  • Возвращает: <fs.StatWatcher>

Отслеживает изменения в filename. Функция обратного вызова listener будет вызываться каждый раз при обращении к файлу.

Аргумент options можно опустить. Если он указан, это должен быть объект. Объект options может содержать логическое свойство с именем persistent, указывающее, должен ли процесс продолжать работу, пока файлы отслеживаются. В объекте options можно задать свойство interval, определяющее интервал опроса целевого объекта в миллисекундах.

Функция listener получает два аргумента: текущий объект stat и предыдущий объект stat:

import { watchFile } from 'node:fs';

watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
});
mjscopy

Эти объекты stat являются экземплярами fs.Stat. Если параметр bigint имеет значение true, числовые значения в этих объектах представлены как BigIntы.

Чтобы получать уведомления об изменении файла, а не только о доступе к нему, необходимо сравнивать curr.mtimeMs и prev.mtimeMs.

Если операция fs.watchFile завершается ошибкой ENOENT, функция-обработчик будет вызвана один раз, причём все поля будут обнулены (а для дат будет указана эпоха Unix). Если позднее файл будет создан, функция-обработчик будет вызвана повторно с последними объектами stat. Это изменение поведения действует начиная с версии v0.10.

Использование fs.watch() эффективнее, чем fs.watchFile и fs.unwatchFile. По возможности вместо fs.watchFile и fs.unwatchFile следует использовать fs.watch.

Если файл, отслеживаемый с помощью fs.watchFile(), исчезает и появляется снова, содержимое previous во втором событии обратного вызова (при повторном появлении файла) будет таким же, как содержимое previous в первом событии обратного вызова (при исчезновении файла).

Это происходит в следующих случаях:

  • файл удаляется, а затем восстанавливается
  • файл переименовывается, а затем переименовывается ещё раз, возвращая исходное имя

fs.write(fd, buffer, offset[, length[, position]], callback)

Добавлено в: v0.0.2
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v14.0.0

Параметр buffer больше не преобразует неподдерживаемые входные данные в строки.

v10.10.0

Параметр buffer теперь может иметь тип TypedArray или быть DataView.

v10.0.0

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

v7.4.0

Параметр buffer теперь может быть Uint8Array.

v7.2.0

Параметры offset и length теперь являются необязательными.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer> По умолчанию: 0
  • length <integer> По умолчанию: buffer.byteLength - offset
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffer <Buffer> | <TypedArray> | <DataView>

Записывает buffer в файл, указанный в fd.

offset определяет часть буфера, которую нужно записать, а length — целое число, задающее количество записываемых байтов.

position указывает смещение от начала файла, по которому должны быть записаны эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

Обратному вызову будут переданы три аргумента (err, bytesWritten, buffer), где bytesWritten указывает, сколько байтов было записано из buffer.

При вызове этого метода в виде версии с util.promisify() он возвращает промис для Object со свойствами bytesWritten и buffer.

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

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

fs.write(fd, buffer[, options], callback)

Добавлено в: v18.3.0, v16.17.0
  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffer <Buffer> | <TypedArray> | <DataView>

Записывает buffer в файл, указанный в fd.

Подобно описанной выше функции fs.write, эта версия принимает необязательный объект options. Если объект options не указан, используются значения по умолчанию, приведённые выше.

fs.write(fd, string[, position[, encoding]], callback)

Добавлено в: v0.11.5
История
Версия Изменения
v19.0.0

Передача параметру string объекта с собственной функцией toString больше не поддерживается.

v17.8.0

Передача параметру string объекта с собственной функцией toString объявлена устаревшей.

v14.12.0

Параметр string преобразует объект в строку, если у него явно задана функция toString.

v14.0.0

Параметр string больше не преобразует неподдерживаемые входные данные в строки.

v10.0.0

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

v7.2.0

Теперь параметр position является необязательным.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выведено предупреждение об устаревании с идентификатором DEP0013.

  • fd <integer>
  • string <string>
  • position <integer> | <null> По умолчанию: null
  • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • written <integer>
    • string <string>

Записывает string в файл, указанный параметром fd. Если string не является строкой, выбрасывается исключение.

position указывает смещение от начала файла, по которому следует записать эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

encoding — ожидаемая кодировка строки.

Функция обратного вызова получит аргументы (err, written, string), где written указывает, сколько байтов требуется для записи переданной строки. Количество записанных байтов не обязательно совпадает с количеством записанных символов строки. См. Buffer.byteLength.

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

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

В Windows, если файловый дескриптор подключен к консоли (например, fd == 1 или stdout), строка, содержащая символы не из ASCII, по умолчанию будет отображаться некорректно независимо от используемой кодировки. Консоль можно настроить для корректного отображения UTF-8, изменив активную кодовую страницу с помощью команды chcp 65001. Подробнее см. документацию chcp.

fs.writeFile(file, data[, options], callback)

Добавлено в: v0.1.29
История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v19.0.0

Передача в параметр string объекта с собственной функцией toString больше не поддерживается.

v18.0.0

Передача недопустимого callback в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v17.8.0

Передача в параметр string объекта с собственной функцией toString объявлена устаревшей.

v16.0.0

Возвращаемая ошибка может быть объектом AggregateError, если возвращено несколько ошибок.

v15.2.0, v14.17.0

Аргумент options может содержать AbortSignal для прерывания выполняющегося запроса writeFile.

v14.12.0

Параметр data преобразует объект в строку с помощью явно заданной функции toString.

v14.0.0

Параметр data больше не преобразует неподдерживаемые входные данные в строки.

v10.10.0

Параметр data теперь может быть любым TypedArray или DataView.

v10.0.0

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

v7.4.0

Параметр data теперь может быть объектом Uint8Array.

v7.0.0

Параметр callback больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором DEP0013.

v5.0.0

Параметр file теперь может быть дескриптором файла.

  • file <string> | <Buffer> | <URL> | <integer> имя файла или дескриптор файла
  • data <string> | <Buffer> | <TypedArray> | <DataView>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'w'.
    • flush <boolean> Если все данные успешно записаны в файл и flush имеет значение true, для сброса данных используется fs.fsync(). По умолчанию: false.
    • signal <AbortSignal> позволяет прервать выполняющуюся операцию writeFile
  • callback <Function>
    • err <Error> | <AggregateError>

Если file — имя файла, данные асинхронно записываются в файл, заменяя его, если он уже существует. data может быть строкой или буфером.

Если file — дескриптор файла, поведение аналогично прямому вызову fs.write() (который рекомендуется использовать). См. примечания ниже об использовании дескриптора файла.

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

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

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

const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});
mjscopy

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

import { writeFile } from 'node:fs';

writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
mjscopy

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

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

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

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

const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
  // When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort();
mjscopy

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

Использование fs.writeFile() с файловыми дескрипторами

Если file является файловым дескриптором, поведение почти идентично прямому вызову fs.write(), например:

import { write } from 'node:fs';
import { Buffer } from 'node:buffer';

write(fd, Buffer.from(data, options.encoding), callback);
mjscopy

Отличие от прямого вызова fs.write() заключается в том, что при некоторых необычных условиях fs.write() может записать только часть буфера, и для записи оставшихся данных потребуется повторная попытка, тогда как fs.writeFile() повторяет попытки, пока данные не будут записаны полностью (или не произойдет ошибка).

Последствия этого часто становятся причиной путаницы. В случае с файловым дескриптором файл не заменяется! Данные не обязательно записываются в начало файла, а исходные данные файла могут сохраниться до и/или после вновь записанных данных.

Например, если fs.writeFile() вызвать дважды подряд: сначала для записи строки 'Hello', а затем для записи строки ', World', файл будет содержать 'Hello, World', а также может содержать часть исходных данных файла (в зависимости от размера исходного файла и позиции файлового дескриптора). Если бы вместо дескриптора использовалось имя файла, можно было бы гарантировать, что файл будет содержать только ', World'.

fs.writev(fd, buffers[, position], callback)

Добавлено в: v12.9.0
История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • fd <integer>
  • buffers {ArrayBufferView[]}
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffers {ArrayBufferView[]}

Записывает массив ArrayBufferView в файл, указанный в fd, используя writev().

position — это смещение от начала файла, по которому следует записать эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию.

Функции обратного вызова будут переданы три аргумента: err, bytesWritten и buffers. bytesWritten — это количество байтов, записанных из buffers.

Если этот метод util.promisify()ен, он возвращает промис для Object со свойствами bytesWritten и buffers.

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

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

Синхронный API

Синхронные API выполняют все операции синхронно, блокируя цикл событий до завершения операции или возникновения ошибки.

fs.accessSync(path[, mode])

Добавлено в: v0.11.15
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • mode <integer> По умолчанию: fs.constants.F_OK

Синхронно проверяет разрешения пользователя для файла или каталога, указанного в 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 см. в разделе Константы доступа к файлам.

Если какая-либо из проверок доступности завершится неудачей, будет вызвана ошибка Error. В противном случае метод вернет undefined.

import { accessSync, constants } from 'node:fs';

try {
  accessSync('etc/passwd', constants.R_OK | constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
}
mjscopy

fs.appendFileSync(path, data[, options])

Добавлено в: v0.6.7
История
Версия Изменения
v21.1.0, v20.10.0

Теперь поддерживается параметр flush.

v7.0.0

Переданный объект options никогда не будет изменён.

v5.0.0

Теперь параметр file может быть дескриптором файла.

  • path <string> | <Buffer> | <URL> | <number> имя файла или дескриптор файла
  • data <string> | <Buffer>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'a'.
    • flush <boolean> Если true, перед закрытием базовый дескриптор файла сбрасывается. По умолчанию: false.

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

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

import { appendFileSync } from 'node:fs';

try {
  appendFileSync('message.txt', 'data to append');
  console.log('The "data to append" was appended to file!');
} catch (err) {
  /* Handle the error */
}
mjscopy

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

import { appendFileSync } from 'node:fs';

appendFileSync('message.txt', 'data to append', 'utf8');
mjscopy

Параметр path может быть задан как числовой дескриптор файла, открытого для добавления данных (с помощью fs.open() или fs.openSync()). Дескриптор файла не будет закрыт автоматически.

import { openSync, closeSync, appendFileSync } from 'node:fs';

let fd;

try {
  fd = openSync('message.txt', 'a');
  appendFileSync(fd, 'data to append', 'utf8');
} catch (err) {
  /* Handle the error */
} finally {
  if (fd !== undefined)
    closeSync(fd);
}
mjscopy

fs.chmodSync(path, mode)

Добавлено в: v0.6.7
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

  • path <string> | <Buffer> | <URL>
  • mode <string> | <integer>

Подробную информацию см. в документации асинхронной версии этого API: fs.chmod().

Дополнительные сведения см. в документации POSIX для chmod(2).

fs.chownSync(path, uid, gid)

Добавлено в: v0.1.97
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

  • path <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>

Синхронно изменяет владельца и группу файла. Возвращает undefined. Это синхронная версия fs.chown().

Дополнительные сведения см. в документации POSIX для chown(2).

fs.closeSync(fd)

Добавлено в: v0.1.21
  • fd <integer>

Закрывает дескриптор файла. Возвращает undefined.

Вызов fs.closeSync() для любого дескриптора файла (fd), который в данный момент используется в какой-либо другой операции fs, может привести к неопределённому поведению.

Дополнительные сведения см. в документации POSIX для close(2).

fs.copyFileSync(src, dest[, mode])

Добавлено в: v8.5.0
История
Версия Изменения
v14.0.0

Аргумент flags заменён на mode; также была введена более строгая проверка типов.

  • src <string> | <Buffer> | <URL> имя исходного файла для копирования
  • dest <string> | <Buffer> | <URL> имя файла назначения для операции копирования
  • mode <integer> модификаторы операции копирования. По умолчанию: 0.

Синхронно копирует src в dest. По умолчанию dest перезаписывается, если уже существует. Возвращает undefined. Node.js не гарантирует атомарность операции копирования. Если ошибка возникает после открытия файла назначения для записи, Node.js попытается удалить файл назначения.

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

  • fs.constants.COPYFILE_EXCL: операция копирования завершится ошибкой, если dest уже существует.
  • fs.constants.COPYFILE_FICLONE: операция копирования попытается создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, будет использован резервный механизм копирования.
  • fs.constants.COPYFILE_FICLONE_FORCE: операция копирования попытается создать reflink с копированием при записи. Если платформа не поддерживает копирование при записи, операция завершится ошибкой.
import { copyFileSync, constants } from 'node:fs';

// destination.txt will be created or overwritten by default.
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');

// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
mjscopy

fs.cpSync(src, dest[, options])

Добавлено в: v16.7.0
История
Версия Изменения
v22.3.0

Этот API больше не является экспериментальным.

v20.1.0, v18.17.0

Добавлен параметр mode, задающий поведение копирования как аргумент mode для fs.copyFile().

v17.6.0, v16.15.0

Добавлен параметр verbatimSymlinks, задающий, следует ли разрешать пути для символических ссылок.

  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения для копирования.
  • options <Object>
    • dereference <boolean> разыменовывать символические ссылки. По умолчанию: false.
    • errorOnExist <boolean> если force имеет значение false и путь назначения существует, выбрасывать ошибку. По умолчанию: false.
    • filter <Function> Функция для фильтрации копируемых файлов и каталогов. Возвращайте true, чтобы скопировать элемент, или false, чтобы пропустить его. При пропуске каталога пропускается и всё его содержимое. По умолчанию: undefined
      • src <string> исходный путь для копирования.
      • dest <string> путь назначения для копирования.
      • Возвращает: <boolean> Любое значение, отличное от Promise, которое можно преобразовать в boolean.
    • force <boolean> перезаписывать существующий файл или каталог. Если установить значение false и путь назначения существует, операция копирования будет игнорировать ошибки. Чтобы изменить это поведение, используйте параметр errorOnExist. По умолчанию: true.
    • mode <integer> модификаторы операции копирования. По умолчанию: 0. См. флаг mode у fs.copyFileSync().
    • preserveTimestamps <boolean> Если true, временные метки из src будут сохранены. По умолчанию: false.
    • recursive <boolean> рекурсивно копировать каталоги По умолчанию: false
    • verbatimSymlinks <boolean> Если true, разрешение путей для символических ссылок будет пропущено. По умолчанию: false

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

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

fs.existsSync(path)

Добавлено в: v0.1.21
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

  • path <string> | <Buffer> | <URL>
  • Возвращает: <boolean>

Возвращает true, если путь существует, и false в противном случае.

Подробную информацию см. в документации по асинхронной версии этого API: fs.exists().

fs.exists() устарел, но fs.existsSync() — нет. Параметр callback для fs.exists() принимает параметры, несовместимые с другими обратными вызовами Node.js. fs.existsSync() не использует обратный вызов.

import { existsSync } from 'node:fs';

if (existsSync('/etc/passwd'))
  console.log('The path exists.');
mjscopy

fs.fchmodSync(fd, mode)

Добавлено в: v0.4.7
  • fd <integer>
  • mode <string> | <integer>

Устанавливает права доступа к файлу. Возвращает undefined.

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

fs.fchownSync(fd, uid, gid)

Добавлено в: v0.4.7
  • fd <integer>
  • uid <integer> Идентификатор пользователя нового владельца файла.
  • gid <integer> Идентификатор группы новой группы файла.

Устанавливает владельца файла. Возвращает undefined.

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

fs.fdatasyncSync(fd)

Добавлено в: v0.1.96
  • fd <integer>

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

fs.fstatSync(fd[, options])

Добавлено в: v0.1.95
История
Версия Изменения
v10.5.0

Принимает дополнительный объект options, который указывает, должны ли возвращаемые числовые значения иметь тип bigint.

  • fd <integer>
  • options <Object>
    • bigint <boolean> Указывает, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для файлового дескриптора.

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

fs.fsyncSync(fd)

Добавлено в: v0.1.96
  • fd <integer>

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

fs.ftruncateSync(fd[, len])

Добавлено в: v0.8.6
  • fd <integer>
  • len <integer> По умолчанию: 0

Усекает файл, связанный с файловым дескриптором. Возвращает undefined.

Подробную информацию см. в документации по асинхронной версии этого API: fs.ftruncate().

fs.futimesSync(fd, atime, mtime)

Добавлено в: v0.4.2
История
Версия Изменения
v4.1.0

Числовые строки, NaN и Infinity теперь допускаются в качестве спецификаторов времени.

  • fd <integer>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

Синхронная версия fs.futimes(). Возвращает undefined.

fs.globSync(pattern[, options])

Добавлено в: v22.0.0
История
Версия Изменения
v26.1.0

Добавлена поддержка параметра followSymlinks.

v24.1.0, v22.17.0

Добавлена поддержка экземпляров URL для параметра cwd.

v24.0.0, v22.17.0

API отмечен как стабильный.

v23.7.0, v22.14.0

Добавлена поддержка параметра exclude для приёма шаблонов glob.

v22.2.0

Добавлена поддержка withFileTypes в качестве параметра.

  • pattern <string> | <string[]>
  • options <Object>
    • cwd <string> | <URL> текущий рабочий каталог. По умолчанию: process.cwd()
    • exclude <Function> | <string[]> Функция для фильтрации файлов/каталогов или список шаблонов glob, которые нужно исключить. Если указана функция, верните true, чтобы исключить элемент, или false, чтобы включить его. По умолчанию: undefined.
    • followSymlinks <boolean> Если значение true, символические ссылки на каталоги обрабатываются при раскрытии шаблонов **. По умолчанию: false.
    • withFileTypes <boolean> true, если glob должен возвращать пути в виде Dirent, и false в противном случае. По умолчанию: false.
  • Возвращает: <string[]> пути к файлам, соответствующим шаблону.

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

Модули JavaScript
import { globSync } from 'node:fs';

console.log(globSync('**/*.js'));
CommonJS
const { globSync } = require('node:fs');

console.log(globSync('**/*.js'));

fs.lchmodSync(path, mode)

Устарел в: v0.4.7

Стабильность: 0 — устаревший

  • path <string> | <Buffer> | <URL>
  • mode <integer>

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

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

Дополнительные сведения см. в документации POSIX для lchmod(2).

fs.lchownSync(path, uid, gid)

История
Версия Изменения
v10.6.0

Этот API больше не считается устаревшим.

v0.4.7

Устаревание указано только в документации.

  • path <string> | <Buffer> | <URL>
  • uid <integer> Идентификатор пользователя нового владельца файла.
  • gid <integer> Идентификатор группы новой группы файла.

Устанавливает владельца для указанного пути. Возвращает undefined.

Дополнительные сведения см. в документации POSIX для lchown(2).

fs.lutimesSync(path, atime, mtime)

Добавлено в: v14.5.0, v12.19.0
  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

Изменяет временные метки файловой системы символической ссылки, на которую указывает path. Возвращает undefined или выбрасывает исключение, если параметры указаны неверно или операция завершается неудачей. Это синхронная версия fs.lutimes().

fs.linkSync(existingPath, newPath)

Добавлено в: v0.1.31
История
Версия Изменения
v7.6.0

Параметры existingPath и newPath могут быть объектами WHATWG URL, использующими протокол file:. Поддержка по-прежнему носит экспериментальный характер.

  • existingPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>

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

fs.lstatSync(path[, options])

Добавлено в: v0.1.30
История
Версия Изменения
v15.3.0, v14.17.0

Принимает параметр throwIfNoEntry, позволяющий указать, следует ли выбрасывать исключение, если запись не существует.

v10.5.0

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

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Указывает, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Указывает, будет ли выброшено исключение, если запись в файловой системе отсутствует, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для символической ссылки, на которую указывает path.

Дополнительные сведения см. в документации POSIX для lstat(2).

fs.mkdirSync(path[, options])

Добавлено в: v0.1.21
История
Версия Изменения
v13.11.0, v12.17.0

В режиме recursive теперь возвращается первый созданный путь.

v10.12.0

Теперь второй аргумент может быть объектом options со свойствами recursive и mode.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • options <Object> | <integer>
    • recursive <boolean> По умолчанию: false
    • mode <string> | <integer> Не поддерживается в Windows. По умолчанию: 0o777.
  • Возвращает: <string> | <undefined>

Синхронно создаёт каталог. Возвращает undefined или, если recursive имеет значение true, путь к первому созданному каталогу. Это синхронная версия fs.mkdir().

Дополнительные сведения см. в документации POSIX для mkdir(2).

fs.mkdtempSync(prefix[, options])

Добавлено в: v5.10.0
История
Версия Изменения
v20.6.0, v18.19.0

Параметр prefix теперь принимает буферы и URL.

v16.5.0, v14.18.0

Параметр prefix теперь принимает пустую строку.

  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <string>

Возвращает путь к созданному каталогу.

Подробные сведения см. в документации асинхронной версии этого API: fs.mkdtemp().

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

fs.mkdtempDisposableSync(prefix[, options])

Добавлено в: v24.4.0
  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <Object> Объект, поддерживающий освобождение ресурсов:
    • path <string> Путь к созданному каталогу.
    • remove <Function> Функция, удаляющая созданный каталог.
    • [Symbol.dispose] <Function> То же, что и remove.

Возвращает объект, поддерживающий освобождение ресурсов, свойство path которого содержит путь к созданному каталогу. При освобождении ресурсов объекта каталог и его содержимое будут удалены, если они всё ещё существуют. Если каталог не удастся удалить, освобождение ресурсов вызовет ошибку. У объекта есть метод remove(), выполняющий ту же задачу.

Подробные сведения см. в документации для fs.mkdtemp().

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

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

fs.opendirSync(path[, options])

Добавлено в: v12.12.0
История
Версия Изменения
v20.1.0, v18.17.0

Добавлена опция recursive.

v13.1.0, v12.16.0

Добавлена опция bufferSize.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • bufferSize <number> Количество записей каталога, которые буферизуются во внутренней памяти при чтении каталога. Более высокие значения обеспечивают лучшую производительность, но требуют больше памяти. По умолчанию: 32
    • recursive <boolean> По умолчанию: false
  • Возвращает: <fs.Dir>

Синхронно открывает каталог. См. opendir(3).

Создает <fs.Dir>, содержащий все последующие функции для чтения каталога и его очистки.

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

fs.openSync(path[, flags[, mode]])

Добавлено в: v0.1.21
История
Версия Изменения
v11.1.0

Аргумент flags теперь необязателен и по умолчанию имеет значение 'r'.

v9.9.0

Теперь поддерживаются флаги as и as+.

v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

  • path <string> | <Buffer> | <URL>
  • flags <string> | <number> По умолчанию: 'r'. См. поддержку флагов файловой системы flags.
  • mode <string> | <integer> По умолчанию: 0o666
  • Возвращает: <number>

Возвращает целое число, представляющее файловый дескриптор.

Подробную информацию см. в документации по асинхронной версии этого API: fs.open().

fs.readdirSync(path[, options])

Добавлено в: v0.1.21
История
Версия Изменения
v20.1.0, v18.17.0

Добавлена опция recursive.

v10.10.0

Добавлена новая опция withFileTypes.

v7.6.0

Параметр path может быть объектом WHATWG URL с протоколом file:.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
    • withFileTypes <boolean> По умолчанию: false
    • recursive <boolean> Если true, рекурсивно считывает содержимое каталога. В рекурсивном режиме будут перечислены все файлы, вложенные файлы и каталоги. По умолчанию: false.
  • Возвращает: <string[]> | <Buffer[]> | <fs.Dirent[]>

Считывает содержимое каталога.

Дополнительные сведения см. в документации POSIX readdir(3).

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

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

fs.readFileSync(path[, options])

Добавлено в: v0.1.8
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v5.0.0

Теперь параметр path может быть файловым дескриптором.

  • path <string> | <Buffer> | <URL> | <integer> имя файла или файловый дескриптор
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: null
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'r'.
  • Возвращает: <string> | <Buffer>

Возвращает содержимое path.

Подробные сведения см. в документации по асинхронной версии этого API: fs.readFile().

Если указан параметр encoding, эта функция возвращает строку. В противном случае она возвращает буфер.

Как и в случае с fs.readFile(), поведение fs.readFileSync() при передаче пути к каталогу зависит от платформы.

import { readFileSync } from 'node:fs';

// macOS, Linux, and Windows
readFileSync('<directory>');
// => [Error: EISDIR: illegal operation on a directory, read <directory>]

//  FreeBSD
readFileSync('<directory>'); // => <data>
mjscopy

fs.readlinkSync(path[, options])

Добавлено в: v0.1.31
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <string> | <Buffer>

Возвращает строковое значение символической ссылки.

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

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

fs.readSync(fd, buffer, offset, length[, position])

Добавлено в: v0.1.21
История
Версия Изменения
v10.10.0

Теперь параметр buffer может иметь тип TypedArray или быть DataView.

v6.0.0

Теперь параметр length может иметь значение 0.

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer>
  • length <integer>
  • position <integer> | <bigint> | <null> По умолчанию: null
  • Возвращает: <number>

Возвращает количество bytesRead.

Подробные сведения см. в документации по асинхронной версии этого API: fs.read().

fs.readSync(fd, buffer[, options])

Добавлено в: v13.13.0, v12.17.0
История
Версия Изменения
v13.13.0, v12.17.0

Объект параметров можно передать, чтобы параметры offset, length и position стали необязательными.

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> | <null> По умолчанию: null
  • Возвращает: <number>

Возвращает количество bytesRead.

Подобно описанной выше функции fs.readSync, эта версия принимает необязательный объект options. Если объект options не указан, будут использоваться значения по умолчанию, приведённые выше.

Подробную информацию см. в документации асинхронной версии этого API: fs.read().

fs.readvSync(fd, buffers[, position])

Добавлено в: v13.13.0, v12.17.0
  • fd <integer>
  • buffers {ArrayBufferView[]}
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество прочитанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.readv().

fs.realpathSync(path[, options])

Добавлено в: v0.1.31
История
Версия Изменения
v8.0.0

Добавлена поддержка разрешения путей Pipe/Socket.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v6.4.0

Вызов realpathSync снова работает в различных граничных случаях в Windows.

v6.0.0

Параметр cache был удалён.

  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <string> | <Buffer>

Возвращает разрешённый путь.

Подробную информацию см. в документации асинхронной версии этого API: fs.realpath().

fs.realpathSync.native(path[, options])

Добавлено в: v9.2.0
  • path <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <string> | <Buffer>

Синхронный вариант realpath(3).

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

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

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

fs.renameSync(oldPath, newPath)

Добавлено в: v0.1.21
История
Версия Изменения
v7.6.0

Параметры oldPath и newPath могут быть объектами WHATWG URL, использующими протокол file:. В настоящее время поддержка всё ещё является экспериментальной.

  • oldPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>

Переименовывает файл из oldPath в newPath. Возвращает undefined.

Дополнительные сведения см. в документации POSIX rename(2).

fs.rmdirSync(path[, options])

Добавлено в: v0.1.21
История
Версия Изменения
v25.0.0

Удалён параметр recursive.

v16.0.0

Использование fs.rmdirSync(path, { recursive: true }) для path, являющегося файлом, больше не допускается и приводит к ошибке ENOENT в Windows и к ошибке ENOTDIR в POSIX.

v16.0.0

Использование fs.rmdirSync(path, { recursive: true }) для path, который не существует, больше не допускается и приводит к ошибке ENOENT.

v16.0.0

Параметр recursive устарел, его использование вызывает предупреждение об устаревании.

v14.14.0

Параметр recursive устарел; вместо него используйте fs.rmSync.

v13.3.0, v12.16.0

Параметр maxBusyTries переименован в maxRetries, его значение по умолчанию — 0. Параметр emfileWait удалён, а ошибки EMFILE используют ту же логику повторных попыток, что и другие ошибки. Теперь поддерживается параметр retryDelay. Для ошибок ENFILE теперь выполняются повторные попытки.

v12.10.0

Теперь поддерживаются параметры recursive, maxBusyTries и emfileWait.

v7.6.0

Параметры path могут быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • options <Object> В настоящее время доступные параметры отсутствуют. Ранее существовали параметры recursive, maxBusyTries и emfileWait, но они были объявлены устаревшими и удалены. Аргумент options по-прежнему принимается для обеспечения обратной совместимости, но не используется.

Синхронно выполняет rmdir(2). Возвращает undefined.

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

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

fs.rmSync(path[, options])

Добавлено в: v14.14.0
История
Версия Изменения
v17.3.0, v16.14.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • force <boolean> Если true, исключения будут игнорироваться, если path не существует. По умолчанию: false.
    • maxRetries <integer> При возникновении ошибки EBUSY, EMFILE, ENFILE, ENOTEMPTY или EPERM Node.js повторит операцию, увеличивая линейную задержку между попытками на retryDelay миллисекунд. Этот параметр задаёт количество повторных попыток. Параметр игнорируется, если параметр recursive не равен true. По умолчанию: 0.
    • recursive <boolean> Если true, выполняется рекурсивное удаление каталога. В рекурсивном режиме при сбое операций выполняются повторные попытки. По умолчанию: false.
    • retryDelay <integer> Время ожидания между повторными попытками в миллисекундах. Этот параметр игнорируется, если параметр recursive не равен true. По умолчанию: 100.

Синхронно удаляет файлы и каталоги (по образцу стандартной утилиты POSIX rm). Возвращает undefined.

fs.statSync(path[, options])

Добавлено в: v0.1.21
История
Версия Изменения
v15.3.0, v14.17.0

Принимает параметр throwIfNoEntry, указывающий, следует ли генерировать исключение, если запись не существует.

v10.5.0

Принимает дополнительный объект options, указывающий, следует ли возвращать числовые значения типа bigint.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Следует ли возвращать числовые значения в объекте <fs.Stats> как bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Следует ли генерировать исключение, если запись в файловой системе не существует, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для указанного пути.

fs.statfsSync(path[, options])

Добавлено в: v19.6.0, v18.15.0
  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Следует ли возвращать числовые значения в объекте <fs.StatFs> как bigint. По умолчанию: false.
  • Возвращает: <fs.StatFs>

Синхронный вызов statfs(2). Возвращает информацию о смонтированной файловой системе, содержащей path.

В случае ошибки значение err.code будет одним из общих системных ошибок.

fs.symlinkSync(target, path[, type])

Добавлено в: v0.1.31
История
Версия Изменения
v12.0.0

Если аргумент type не указан, Node автоматически определит тип target и выберет dir или file.

v7.6.0

Параметры target и path могут быть объектами WHATWG URL с использованием протокола file:. В настоящее время поддержка всё ещё является экспериментальной.

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null
  • Возвращает: undefined.

Подробную информацию см. в документации по асинхронной версии этого API: fs.symlink().

fs.truncateSync(path[, len])

Добавлено в: v0.8.6
  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0

Обрезает файл. Возвращает undefined. В качестве первого аргумента также можно передать файловый дескриптор. В этом случае вызывается fs.ftruncateSync().

Передача файлового дескриптора устарела и в будущем может привести к генерации ошибки.

fs.unlinkSync(path)

Добавлено в: v0.1.21
История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

  • path <string> | <Buffer> | <URL>

Синхронный вызов unlink(2). Возвращает undefined.

fs.utimesSync(path, atime, mtime)

Добавлено в: v0.4.2
История
Версия Изменения
v8.0.0

NaN, Infinity и -Infinity больше не являются допустимыми спецификаторами времени.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v4.1.0

Строки с числовыми значениями, NaN и Infinity теперь являются допустимыми спецификаторами времени.

  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • Возвращает: undefined.

Подробную информацию см. в документации асинхронной версии этого API: fs.utimes().

fs.writeFileSync(file, data[, options])

Добавлено в: v0.1.29
История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v19.0.0

Передача в параметр data объекта с собственной функцией toString больше не поддерживается.

v17.8.0

Передача в параметр data объекта с собственной функцией toString объявлена устаревшей.

v14.12.0

Параметр data преобразует объект в строку, если у него есть явно заданная функция toString.

v14.0.0

Параметр data больше не преобразует неподдерживаемые входные данные в строки.

v10.10.0

Параметр data теперь может иметь тип TypedArray или быть DataView.

v7.4.0

Параметр data теперь может быть Uint8Array.

v5.0.0

Параметр file теперь может быть дескриптором файла.

  • file <string> | <Buffer> | <URL> | <integer> имя файла или дескриптор файла
  • data <string> | <Buffer> | <TypedArray> | <DataView>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. поддерживаемые флаги файловой системы flags. По умолчанию: 'w'.
    • flush <boolean> Если все данные успешно записаны в файл и flush имеет значение true, для сброса данных используется fs.fsyncSync().
  • Возвращает: undefined.

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

Подробную информацию см. в документации асинхронной версии этого API: fs.writeFile().

fs.writeSync(fd, buffer, offset[, length[, position]])

Добавлено в: v0.1.21
История
Версия Изменения
v14.0.0

Параметр buffer больше не преобразует неподдерживаемые входные данные в строки.

v10.10.0

Параметр buffer теперь может быть любым TypedArray или DataView.

v7.4.0

Параметр buffer теперь может быть Uint8Array.

v7.2.0

Параметры offset и length теперь необязательны.

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer> По умолчанию: 0
  • length <integer> По умолчанию: buffer.byteLength - offset
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, buffer[, options])

Добавлено в: v18.3.0, v16.17.0
  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, string[, position[, encoding]])

Добавлено в: v0.11.5
История
Версия Изменения
v14.0.0

Параметр string больше не преобразует неподдерживаемые входные данные в строки.

v7.2.0

Параметр position теперь необязателен.

  • fd <integer>
  • string <string>
  • position <integer> | <null> По умолчанию: null
  • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, string...).

fs.writevSync(fd, buffers[, position])

Добавлено в: v12.9.0
  • fd <integer>
  • buffers {ArrayBufferView[]}
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.writev().

Общие объекты

Общие объекты используются всеми вариантами API файловой системы (на основе промисов, с обратным вызовом и синхронным).

Класс: fs.Dir

Добавлено в: v12.12.0

Класс, представляющий поток каталога.

Создается с помощью fs.opendir(), fs.opendirSync() или fsPromises.opendir().

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);
}
mjscopy

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

dir.close()
Добавлено в: v12.12.0
  • Возвращает: <Promise>

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

Возвращается промис, который будет выполнен после закрытия ресурса.

dir.close(callback)
Добавлено в: v12.12.0
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • callback <Function>
    • err <Error>

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

callback будет вызван после закрытия дескриптора ресурса.

dir.closeSync()
Добавлено в: v12.12.0

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

dir.path
Добавлено в: v12.12.0
  • Тип: <string>

Путь этого каталога, доступный только для чтения, который был передан в fs.opendir(), fs.opendirSync() или fsPromises.opendir().

dir.read()
Добавлено в: v12.12.0
  • Возвращает: <Promise> Выполняется с объектом <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога посредством readdir(3) как объект <fs.Dirent>.

Возвращается промис, который будет выполнен с объектом <fs.Dirent> или null, если записей каталога для чтения больше нет.

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

dir.read(callback)
Добавлено в: v12.12.0
  • callback <Function>
    • err <Error>
    • dirent <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога посредством readdir(3) как объект <fs.Dirent>.

После завершения чтения будет вызван callback с объектом <fs.Dirent> или null, если записей каталога для чтения больше нет.

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

dir.readSync()
Добавлено в: v12.12.0
  • Возвращает: <fs.Dirent> | <null>

Синхронно считывает следующую запись каталога как объект <fs.Dirent>. Подробнее см. документацию POSIX по readdir(3).

Если записей каталога для чтения больше нет, будет возвращено null.

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

dir[Symbol.asyncIterator]()
Добавлено в: v12.12.0
  • Возвращает: <AsyncIterator> асинхронный итератор объектов <fs.Dirent>

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

Записи, возвращаемые асинхронным итератором, всегда являются объектами <fs.Dirent>. Случай null из dir.read() обрабатывается внутри.

Пример см. в разделе <fs.Dir>.

Записи каталога, возвращаемые этим итератором, не имеют определенного порядка и располагаются так, как их предоставляет базовый механизм каталогов операционной системы. Записи, добавленные или удаленные во время итерации по каталогу, могут не попасть в результаты итерации.

dir[Symbol.asyncDispose]()
Добавлено в: v24.1.0, v22.1.0
История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

Вызывает dir.close(), если дескриптор каталога открыт, и возвращает промис, который выполняется после завершения освобождения ресурсов.

dir[Symbol.dispose]()
Добавлено в: v24.1.0, v22.1.0
История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

Вызывает dir.closeSync(), если дескриптор каталога открыт, и возвращает undefined.

Класс: fs.Dirent

Добавлено в: v10.10.0

Представление записи каталога, которой может быть файл или подкаталог внутри каталога, возвращаемое при чтении из <fs.Dir>. Запись каталога представляет собой сочетание имени файла и его типа.

Кроме того, если fs.readdir() или fs.readdirSync() вызывается с параметром withFileTypes, установленным в true, результирующий массив заполняется объектами <fs.Dirent>, а не строками или объектами <Buffer>.

dirent.isBlockDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает блочное устройство.

dirent.isCharacterDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символьное устройство.

dirent.isDirectory()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает каталог файловой системы.

dirent.isFIFO()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает канал FIFO (первым вошёл — первым вышел).

dirent.isFile()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает обычный файл.

dirent.isSocket()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает сокет.

dirent.isSymbolicLink()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символическую ссылку.

dirent.name
Добавлено в: v10.10.0
  • Тип: <string> | <Buffer>

Имя файла, на который ссылается этот объект <fs.Dirent>. Тип этого значения определяется параметром options.encoding, переданным в fs.readdir() или fs.readdirSync().

dirent.parentPath
Добавлено в: v21.4.0, v20.12.0, v18.20.0
История
Версия Изменения
v24.0.0, v22.17.0

API объявлен стабильным.

  • Тип: <string>

Путь к родительскому каталогу файла, на который ссылается этот объект <fs.Dirent>.

Класс: fs.FSWatcher

Добавлено в: v0.5.8
  • Расширяет <EventEmitter>

Успешный вызов метода fs.watch() вернёт новый объект <fs.FSWatcher>.

Все объекты <fs.FSWatcher> генерируют событие 'change' при изменении конкретного отслеживаемого файла.

Событие: 'change'
Добавлено в: v0.5.8
  • eventType <string> Тип произошедшего события изменения
  • filename <string> | <Buffer> Имя изменившегося файла (если применимо или доступно)

Генерируется при изменении чего-либо в отслеживаемом каталоге или файле. Подробнее см. в разделе fs.watch().

Аргумент filename может не предоставляться в зависимости от поддержки операционной системы. Если filename предоставлен, он будет передан как <Buffer>, если fs.watch() вызван с параметром encoding, установленным в 'buffer'; в противном случае filename будет строкой в кодировке UTF-8.

import { watch } from 'node:fs';
// Example when handled through fs.watch() listener
watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
  if (filename) {
    console.log(filename);
    // Prints: <Buffer ...>
  }
});
mjscopy
Событие: 'close'
Добавлено в: v10.0.0

Генерируется, когда наблюдатель прекращает отслеживать изменения. Закрытый объект <fs.FSWatcher> больше нельзя использовать в обработчике события.

Событие: 'error'
Добавлено в: v0.5.8
  • error <Error>

Генерируется при возникновении ошибки во время наблюдения за файлом. Объект <fs.FSWatcher>, в котором произошла ошибка, больше нельзя использовать в обработчике события.

watcher.close()
Добавлено в: v0.5.8

Прекращает отслеживание изменений для указанного объекта <fs.FSWatcher>. После остановки объект <fs.FSWatcher> больше нельзя использовать.

watcher.ref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект <fs.FSWatcher>. Повторные вызовы watcher.ref() не повлияют на результат.

По умолчанию для всех объектов <fs.FSWatcher> включена ссылка («ref'ed»), поэтому обычно нет необходимости вызывать watcher.ref(), если ранее не был вызван watcher.unref().

watcher.unref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове активному объекту <fs.FSWatcher> больше не требуется, чтобы цикл событий Node.js оставался активным. Если нет других задач, поддерживающих работу цикла событий, процесс может завершиться до вызова обратного вызова объекта <fs.FSWatcher>. Повторные вызовы watcher.unref() не повлияют на результат.

Класс: fs.StatWatcher

Добавлено в: v14.3.0, v12.20.0
  • Расширяет <EventEmitter>

При успешном вызове метода fs.watchFile() возвращается новый объект <fs.StatWatcher>.

watcher.ref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект <fs.StatWatcher>. Повторные вызовы watcher.ref() не повлияют на результат.

По умолчанию для всех объектов <fs.StatWatcher> включена ссылка («ref'ed»), поэтому обычно нет необходимости вызывать watcher.ref(), если ранее не был вызван watcher.unref().

watcher.unref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове активному объекту <fs.StatWatcher> больше не требуется, чтобы цикл событий Node.js оставался активным. Если нет других задач, поддерживающих работу цикла событий, процесс может завершиться до вызова обратного вызова объекта <fs.StatWatcher>. Повторные вызовы watcher.unref() не повлияют на результат.

Класс: fs.ReadStream

Добавлено в: v0.1.93
  • Расширяет: <stream.Readable>

Экземпляры <fs.ReadStream> нельзя создать напрямую. Они создаются и возвращаются функцией fs.createReadStream().

Событие: 'close'
Добавлено в: v0.1.93

Генерируется после закрытия базового файлового дескриптора объекта <fs.ReadStream>.

Событие: 'open'
Добавлено в: v0.1.93
  • fd <integer> Целочисленный файловый дескриптор, используемый объектом <fs.ReadStream>.

Генерируется после открытия файлового дескриптора объекта <fs.ReadStream>.

Событие: 'ready'
Добавлено в: v9.11.0

Генерируется, когда объект <fs.ReadStream> готов к использованию.

Срабатывает сразу после 'open'.

readStream.bytesRead
Добавлено в: v6.4.0
  • Тип: <number>

Количество байтов, считанных на данный момент.

readStream.path
Добавлено в: v0.1.93
  • Тип: <string> | <Buffer>

Путь к файлу, из которого поток считывает данные, как указано в первом аргументе fs.createReadStream(). Если path передан как строка, то readStream.path будет строкой. Если path передан как <Buffer>, то readStream.path будет <Buffer>. Если указан fd, то readStream.path будет undefined.

readStream.pending
Добавлено в: v11.2.0, v10.16.0
  • Тип: <boolean>

Это свойство имеет значение true, если файл ещё не был открыт, то есть до вызова события 'ready'.

Класс: fs.Stats

Добавлено в: v0.1.21
История
Версия Изменения
v26.2.0

Добавлена поддержка Temporal.Instant.

v22.0.0, v20.13.0

Общедоступный конструктор объявлен устаревшим.

v8.1.0

Добавлены значения времени в виде чисел.

Объект <fs.Stats> предоставляет сведения о файле.

Объекты, возвращаемые методами fs.stat(), fs.lstat(), fs.fstat() и их синхронными аналогами, имеют этот тип. Если параметр bigint в объекте options, переданном этим методам, имеет значение true, числовые значения будут представлены типом bigint вместо number, а объект будет содержать дополнительные свойства с точностью до наносекунд и суффиксом Ns. Объекты Stat не следует создавать напрямую с помощью ключевого слова new.

Stats {
  dev: 2114,
  ino: 48064969,
  mode: 33188,
  nlink: 1,
  uid: 85,
  gid: 100,
  rdev: 0,
  size: 527,
  blksize: 4096,
  blocks: 8,
  atimeMs: 1318289051000.1,
  mtimeMs: 1318289051000.1,
  ctimeMs: 1318289051000.1,
  birthtimeMs: 1318289051000.1,

  // Instances of Date
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT,

  // Instances of Temporal.Instant
  atimeInstant: 2011-10-10T23:24:11.0001Z,
  mtimeInstant: 2011-10-10T23:24:11.0001Z,
  ctimeInstant: 2011-10-10T23:24:11.0001Z,
  birthtimeInstant: 2011-10-10T23:24:11.0001Z
}
consolecopy

Версия bigint:

BigIntStats {
  dev: 2114n,
  ino: 48064969n,
  mode: 33188n,
  nlink: 1n,
  uid: 85n,
  gid: 100n,
  rdev: 0n,
  size: 527n,
  blksize: 4096n,
  blocks: 8n,
  atimeMs: 1318289051000n,
  mtimeMs: 1318289051000n,
  ctimeMs: 1318289051000n,
  birthtimeMs: 1318289051000n,
  atimeNs: 1318289051000000000n,
  mtimeNs: 1318289051000000000n,
  ctimeNs: 1318289051000000000n,
  birthtimeNs: 1318289051000000000n,

  // Instances of Date
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT,

  // Instances of Temporal.Instant
  atimeInstant: 2011-10-10T23:24:11Z,
  mtimeInstant: 2011-10-10T23:24:11Z,
  ctimeInstant: 2011-10-10T23:24:11Z,
  birthtimeInstant: 2011-10-10T23:24:11Z
}
consolecopy
stats.isBlockDevice()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает блочное устройство.

stats.isCharacterDevice()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает символьное устройство.

stats.isDirectory()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает каталог файловой системы.

Если объект <fs.Stats> получен в результате вызова fs.lstat() для символической ссылки, указывающей на каталог, этот метод вернёт false. Это связано с тем, что fs.lstat() возвращает сведения о самой символической ссылке, а не о пути, на который она указывает.

stats.isFIFO()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает канал FIFO (первым пришёл — первым ушёл).

stats.isFile()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает обычный файл.

stats.isSocket()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает сокет.

stats.isSymbolicLink()
Добавлено в: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает символическую ссылку.

Этот метод действителен только при использовании fs.lstat().

stats.dev
  • Тип: <number> | <bigint>

Числовой идентификатор устройства, содержащего файл.

stats.ino
  • Тип: <number> | <bigint>

Номер «inode» файла, специфичный для файловой системы.

stats.mode
  • Тип: <number> | <bigint>

Битовая маска, описывающая тип и режим файла.

stats.nlink
  • Тип: <number> | <bigint>

Количество жестких ссылок на файл.

stats.uid
  • Тип: <number> | <bigint>

Числовой идентификатор пользователя, которому принадлежит файл (POSIX).

stats.gid
  • Тип: <number> | <bigint>

Числовой идентификатор группы, которой принадлежит файл (POSIX).

stats.rdev
  • Тип: <number> | <bigint>

Числовой идентификатор устройства, если файл представляет собой устройство.

stats.size
  • Тип: <number> | <bigint>

Размер файла в байтах.

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

stats.blksize
  • Тип: <number> | <bigint>

Размер блока файловой системы для операций ввода-вывода.

stats.blocks
  • Тип: <number> | <bigint>

Количество блоков, выделенных для этого файла.

stats.atimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени последнего доступа к этому файлу, выраженная в миллисекундах с начала эпохи POSIX.

stats.mtimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени последнего изменения этого файла, выраженная в миллисекундах с начала эпохи POSIX.

stats.ctimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени последнего изменения состояния файла, выраженная в миллисекундах с начала эпохи POSIX.

stats.birthtimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени создания этого файла, выраженная в миллисекундах с начала эпохи POSIX.

stats.atimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени последнего доступа к этому файлу, выраженная в наносекундах с начала эпохи POSIX.

stats.mtimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени последнего изменения этого файла, выраженная в наносекундах с начала эпохи POSIX.

stats.ctimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени последнего изменения состояния файла, выраженная в наносекундах с начала эпохи POSIX.

stats.birthtimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени создания этого файла, выраженная в наносекундах с начала эпохи POSIX.

stats.atime
Добавлено в версии: v0.11.13
  • Тип: <Date>

Метка времени последнего доступа к этому файлу.

stats.mtime
Добавлено в версии: v0.11.13
  • Тип: <Date>

Метка времени последнего изменения этого файла.

stats.ctime
Добавлено в: v0.11.13
  • Тип: <Date>

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

stats.birthtime
Добавлено в: v0.11.13
  • Тип: <Date>

Метка времени, указывающая время создания этого файла.

Значения времени Stat

Свойства atimeMs, mtimeMs, ctimeMs, birthtimeMs — это числовые значения, содержащие соответствующее время в миллисекундах. Их точность зависит от платформы. Если при вызове метода, создающего объект, передан параметр bigint: true, значения свойств будут иметь тип bigint, в противном случае это будут числа.

Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs — это значения типа bigint, содержащие соответствующее время в наносекундах. Они присутствуют только в том случае, если при вызове метода, создающего объект, передан параметр bigint: true. Их точность зависит от платформы.

Объекты Date atime, mtime, ctime и birthtime представляют собой альтернативные представления различных значений времени. Значения Date и числовые значения не связаны между собой. Присваивание нового числового значения или изменение значения Date не повлияет на соответствующее альтернативное представление.

Значения времени в объекте stat имеют следующую семантику:

  • atime «Время доступа»: время последнего обращения к данным файла. Изменяется системными вызовами mknod(2), utimes(2) и read(2).
  • mtime «Время изменения»: время последнего изменения данных файла. Изменяется системными вызовами mknod(2), utimes(2) и write(2).
  • ctime «Время смены состояния»: время последнего изменения состояния файла (изменения данных inode). Изменяется системными вызовами chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2), read(2) и write(2).
  • birthtime «Время создания»: время создания файла. Устанавливается один раз при создании файла. В файловых системах, где время создания недоступно, это поле может содержать вместо него значение ctime или 1970-01-01T00:00Z (то есть метку времени эпохи Unix 0). В таком случае это значение может быть больше, чем atime или mtime. В Darwin и других вариантах FreeBSD это значение также устанавливается, если с помощью системного вызова utimes(2) параметр atime явно устанавливается в значение, предшествующее текущему значению birthtime.

До Node.js 0.12 свойство ctime в системах Windows содержало значение birthtime. Начиная с версии 0.12, ctime не означает «время создания», а в системах Unix оно никогда этого не означало.

Класс: fs.StatFs

Добавлено в: v19.6.0, v18.15.0

Предоставляет сведения о смонтированной файловой системе.

Объекты, возвращаемые методом fs.statfs() и его синхронным аналогом, относятся к этому типу. Если параметр bigint в объекте options, переданном этим методам, равен true, числовые значения будут иметь тип bigint вместо number.

StatFs {
  type: 1397114950,
  bsize: 4096,
  frsize: 4096,
  blocks: 121938943,
  bfree: 61058895,
  bavail: 61058895,
  files: 999,
  ffree: 1000000
}
consolecopy

Версия bigint:

StatFs {
  type: 1397114950n,
  bsize: 4096n,
  frsize: 4096n,
  blocks: 121938943n,
  bfree: 61058895n,
  bavail: 61058895n,
  files: 999n,
  ffree: 1000000n
}
consolecopy
statfs.bavail
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Свободные блоки, доступные непривилегированным пользователям. Умножьте это значение на statfs.bsize, чтобы получить количество доступных байтов.

Модули JavaScript
import { statfs } from 'node:fs/promises';

const stats = await statfs('/');
const availableBytes = stats.bsize * stats.bavail;
console.log(`Available space: ${availableBytes} bytes`);
CommonJS
const { statfs } = require('node:fs/promises');

(async () => {
  const stats = await statfs('/');
  const availableBytes = stats.bsize * stats.bavail;
  console.log(`Available space: ${availableBytes} bytes`);
})();
statfs.bfree
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Свободные блоки в файловой системе. Умножьте это значение на statfs.bsize, чтобы получить количество свободных байтов.

Модули JavaScript
import { statfs } from 'node:fs/promises';

const stats = await statfs('/');
const freeBytes = stats.bsize * stats.bfree;
console.log(`Free space: ${freeBytes} bytes`);
CommonJS
const { statfs } = require('node:fs/promises');

(async () => {
  const stats = await statfs('/');
  const freeBytes = stats.bsize * stats.bfree;
  console.log(`Free space: ${freeBytes} bytes`);
})();
statfs.blocks
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Общее количество блоков данных в файловой системе. Умножьте это значение на statfs.bsize, чтобы получить общий размер в байтах.

Модули JavaScript
import { statfs } from 'node:fs/promises';

const stats = await statfs('/');
const totalBytes = stats.bsize * stats.blocks;
console.log(`Total space: ${totalBytes} bytes`);
CommonJS
const { statfs } = require('node:fs/promises');

(async () => {
  const stats = await statfs('/');
  const totalBytes = stats.bsize * stats.blocks;
  console.log(`Total space: ${totalBytes} bytes`);
})();
statfs.bsize
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Оптимальный размер блока передачи в байтах.

statfs.frsize
Добавлено в: v26.1.0
  • Тип: <number> | <bigint>

Фундаментальный размер блока файловой системы.

statfs.ffree
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Свободные файловые узлы в файловой системе.

statfs.files
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Общее количество файловых узлов в файловой системе.

statfs.type
Добавлено в: v19.6.0, v18.15.0
  • Тип: <number> | <bigint>

Тип файловой системы. Числовой идентификатор типа файловой системы, специфичный для платформы. Это значение соответствует полю f_type, возвращаемому statfs(2) в системах POSIX (например, 0xEF53 для ext4 в Linux). Его значение зависит от ОС и не гарантирует согласованности между платформами.

Класс: fs.Utf8Stream

Добавлено в: v24.6.0

Стабильность: 1 — Экспериментальный

Оптимизированный потоковый писатель UTF-8, позволяющий по запросу сбрасывать всю внутреннюю буферизацию. Он корректно обрабатывает ошибки EAGAIN и допускает настройку поведения, например отбрасывание данных, если диск занят.

Событие: 'close'

Событие 'close' генерируется, когда поток полностью закрыт.

Событие: 'drain'

Событие 'drain' генерируется, когда внутренний буфер достаточно опустел, чтобы можно было продолжить запись.

Событие: 'drop'

Событие 'drop' генерируется, когда достигнута максимальная длина и данные не будут записаны. Отброшенные данные передаются в качестве первого аргумента обработчику события.

Событие: 'error'

Событие 'error' генерируется при возникновении ошибки.

Событие: 'finish'

Событие 'finish' генерируется, когда поток завершен и все данные сброшены в базовый файл.

Событие: 'ready'

Событие 'ready' генерируется, когда поток готов принимать данные для записи.

Событие: 'write'

Событие 'write' генерируется после завершения операции записи. Количество записанных байтов передается в качестве первого аргумента обработчику события.

new fs.Utf8Stream([options])
  • options <Object>
    • append: <boolean> Добавляет данные в конец файла назначения вместо его усечения. По умолчанию: true.
    • contentMode: <string> Тип данных, которые можно передать функции записи; поддерживаются значения 'utf8' или 'buffer'. По умолчанию: 'utf8'.
    • dest: <string> Путь к файлу, в который выполняется запись (режим определяется параметром append).
    • fd: <number> Дескриптор файла, возвращаемый fs.open() или fs.openSync().
    • fs: <Object> Объект с тем же API, что и у модуля fs; полезен для имитации, тестирования или настройки поведения потока.
    • fsync: <boolean> Выполнять fs.fsyncSync() при каждом завершении записи.
    • maxLength: <number> Максимальный размер внутреннего буфера. Если операция записи приведёт к превышению значения maxLength, записываемые данные отбрасываются и генерируется событие drop с отброшенными данными.
    • maxWrite: <number> Максимальное количество байтов, которое можно записать; По умолчанию: 16384
    • minLength: <number> Минимальный размер внутреннего буфера, который должен быть заполнен перед сбросом.
    • mkdir: <boolean> Если значение равно true, обеспечить наличие каталога для файла dest. По умолчанию: false.
    • mode: <number> | <string> Указать режим создания файла (см. fs.open()).
    • periodicFlush: <number> Вызывать сброс буфера каждые periodicFlush миллисекунд.
    • retryEAGAIN <Function> Функция, вызываемая, когда при выполнении write(), writeSync() или flushSync() возникает ошибка EAGAIN или EBUSY. Если возвращаемое значение — true, операция будет повторена; в противном случае ошибка будет передана выше. err — ошибка, вызвавшая вызов этой функции, writeBufferLen — размер записанного буфера, а remainingBufferLen — размер оставшейся части буфера, которую поток не пытался записать.
      • err <any> Ошибка или null.
      • writeBufferLen <number>
      • remainingBufferLen: <number>
    • sync: <boolean> Выполнять запись синхронно.
utf8Stream.append
  • <boolean> Добавляет ли поток данные в конец файла или усекает его.
utf8Stream.contentMode
  • <string> Тип данных, которые можно записать в поток. Поддерживаются значения 'utf8' или 'buffer'. По умолчанию: 'utf8'.
utf8Stream.destroy()

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

utf8Stream.end()

Корректно закрывает поток, сбрасывая внутренний буфер перед закрытием.

utf8Stream.fd
  • <number> Дескриптор файла, в который выполняется запись.
utf8Stream.file
  • <string> Файл, в который выполняется запись.
utf8Stream.flush(callback)
  • callback <Function>
    • err <Error> | <null> Ошибка, если сброс буфера завершился неудачей; в противном случае — null.

Записывает текущий буфер в файл, если запись не выполняется. Ничего не делает, если значение minLength равно нулю или запись уже выполняется.

utf8Stream.flushSync()

Синхронно сбрасывает буферизованные данные. Это затратная операция.

utf8Stream.fsync
  • <boolean> Выполняет ли поток fs.fsyncSync() после каждой операции записи.
utf8Stream.maxLength
  • <number> Максимальная длина внутреннего буфера. Если в результате операции записи длина буфера превысит maxLength, записываемые данные будут отброшены, а вместе с отброшенными данными будет создано событие drop.
utf8Stream.minLength
  • <number> Минимальная длина внутреннего буфера, при достижении которой буфер сбрасывается.
utf8Stream.mkdir
  • <boolean> Должен ли поток проверять наличие каталога для файла dest. Если задано значение true, каталог будет создан, если он не существует. По умолчанию: false.
utf8Stream.mode
  • <number> | <string> Режим файла, в который выполняется запись.
utf8Stream.periodicFlush
  • <number> Интервал между сбросами в миллисекундах. Если задано значение 0, периодический сброс выполняться не будет.
utf8Stream.reopen(file)
  • file: <string> | <Buffer> | <URL> Путь к файлу, в который выполняется запись (режим определяется параметром append).

Повторно открыть файл на месте; полезно при ротации журналов.

utf8Stream.sync
  • <boolean> Выполняет ли поток запись синхронно или асинхронно.
utf8Stream.write(data)
  • data <string> | <Buffer> Данные для записи.
  • Возвращает <boolean>

Если при создании потока для options.contentMode задано значение 'utf8', аргумент data должен быть строкой. Если для contentMode задано значение 'buffer', аргумент data должен иметь тип <Buffer>.

utf8Stream.writing
  • <boolean> Выполняет ли поток в данный момент запись данных в файл.
utf8Stream[Symbol.dispose]()

Вызывает utf8Stream.destroy().

Класс: fs.WriteStream

Добавлено в: v0.1.93
  • Расширяет <stream.Writable>

Экземпляры <fs.WriteStream> нельзя создавать напрямую. Они создаются и возвращаются функцией fs.createWriteStream().

Событие: 'close'
Добавлено в: v0.1.93

Создается, когда базовый файловый дескриптор <fs.WriteStream> закрывается.

Событие: 'open'
Добавлено в: v0.1.93
  • fd <integer> Целочисленный файловый дескриптор, используемый объектом <fs.WriteStream>.

Создается, когда файл объекта <fs.WriteStream> открывается.

Событие: 'ready'
Добавлено в: v9.11.0

Создается, когда <fs.WriteStream> готов к использованию.

Срабатывает сразу после 'open'.

writeStream.bytesWritten
Добавлено в: v0.4.7

Количество записанных на данный момент байтов. Не включает данные, которые все еще ожидают записи в очереди.

writeStream.close([callback])
Добавлено в: v0.9.4
  • callback <Function>
    • err <Error>

Закрывает writeStream. Можно передать функцию обратного вызова, которая будет выполнена после закрытия writeStream.

writeStream.path
Добавлено в: v0.1.93

Путь к файлу, в который выполняется запись потоком, как указано в первом аргументе функции fs.createWriteStream(). Если path передан как строка, то writeStream.path будет строкой. Если path передан как <Buffer>, то writeStream.path будет иметь тип <Buffer>.

writeStream.pending
Добавлено в: v11.2.0
  • Тип: <boolean>

Это свойство имеет значение true, если базовый файл еще не открыт, то есть до создания события 'ready'.

fs.constants

  • Тип: <Object>

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

Константы FS

Следующие константы экспортируются модулями fs.constants и fsPromises.constants.

Не все константы доступны во всех операционных системах; особенно важно учитывать это в Windows, где недоступны многие определения, специфичные для POSIX. Для переносимых приложений рекомендуется перед использованием проверять наличие констант.

Чтобы использовать несколько констант, применяйте оператор побитового ИЛИ |.

Пример:

import { open, constants } from 'node:fs';

const {
  O_RDWR,
  O_CREAT,
  O_EXCL,
} = constants;

open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
  // ...
});
mjscopy
Константы доступа к файлам

Следующие константы предназначены для использования в качестве параметра mode, передаваемого в fsPromises.access(), fs.access() и fs.accessSync().

Константа Описание
F_OK Флаг, указывающий, что файл виден вызывающему процессу. Это полезно для определения существования файла, но ничего не говорит о разрешениях rwx. Используется по умолчанию, если режим не указан.
R_OK Флаг, указывающий, что вызывающий процесс может читать файл.
W_OK Флаг, указывающий, что вызывающий процесс может записывать данные в файл.
X_OK Флаг, указывающий, что вызывающий процесс может выполнять файл. В Windows этот флаг не действует (работает как fs.constants.F_OK).

Эти определения также доступны в Windows.

Константы копирования файлов

Следующие константы предназначены для использования с fs.copyFile().

Константа Описание
COPYFILE_EXCL Если этот флаг указан, операция копирования завершится ошибкой, если файл по целевому пути уже существует.
COPYFILE_FICLONE Если этот флаг указан, операция копирования попытается создать reflink с копированием при записи. Если нижележащая платформа не поддерживает копирование при записи, используется резервный механизм копирования.
COPYFILE_FICLONE_FORCE Если этот флаг указан, операция копирования попытается создать reflink с копированием при записи. Если нижележащая платформа не поддерживает копирование при записи, операция завершится ошибкой.

Эти определения также доступны в Windows.

Константы открытия файлов

Следующие константы предназначены для использования с fs.open().

Константа Описание
O_RDONLY Флаг, указывающий на открытие файла только для чтения.
O_WRONLY Флаг, указывающий на открытие файла только для записи.
O_RDWR Флаг, указывающий на открытие файла для чтения и записи.
O_CREAT Флаг, указывающий на создание файла, если он ещё не существует.
O_EXCL Флаг, указывающий, что открытие файла должно завершиться ошибкой, если установлен флаг O_CREAT и файл уже существует.
O_NOCTTY Флаг, указывающий, что если путь указывает на терминальное устройство, его открытие не должно приводить к тому, что этот терминал станет управляющим терминалом процесса (если у процесса его ещё нет).
O_TRUNC Флаг, указывающий, что если файл существует и является обычным файлом, а его удалось открыть для записи, его длина будет усечена до нуля.
O_APPEND Флаг, указывающий, что данные будут добавляться в конец файла.
O_DIRECTORY Флаг, указывающий, что открытие должно завершиться ошибкой, если путь не является каталогом.
O_NOATIME Флаг, указывающий, что операции чтения файловой системы больше не будут приводить к обновлению сведений atime, связанных с файлом. Этот флаг доступен только в операционных системах Linux.
O_NOFOLLOW Флаг, указывающий, что открытие должно завершиться ошибкой, если путь является символической ссылкой.
O_SYNC Флаг, указывающий, что файл открыт для синхронизированного ввода-вывода, при котором операции записи ожидают обеспечения целостности файла.
O_DSYNC Флаг, указывающий, что файл открыт для синхронизированного ввода-вывода, при котором операции записи ожидают обеспечения целостности данных.
O_SYMLINK Флаг, указывающий на открытие самой символической ссылки, а не ресурса, на который она указывает.
O_DIRECT Если этот флаг установлен, предпринимается попытка свести к минимуму влияние кэширования на операции ввода-вывода с файлами.
O_NONBLOCK Флаг, указывающий на открытие файла в неблокирующем режиме, если это возможно.
UV_FS_O_FILEMAP Если этот флаг установлен, для доступа к файлу используется отображение файла в память. Этот флаг доступен только в операционных системах Windows. В других операционных системах он игнорируется.

В Windows доступны только O_APPEND, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY и UV_FS_O_FILEMAP.

Константы типов файлов

Следующие константы предназначены для использования со свойством mode объекта <fs.Stats> для определения типа файла.

Константа Описание
S_IFMT Битовая маска, используемая для извлечения кода типа файла.
S_IFREG Константа типа файла для обычного файла.
S_IFDIR Константа типа файла для каталога.
S_IFCHR Константа типа файла для символьного устройства.
S_IFBLK Константа типа файла для блочного устройства.
S_IFIFO Константа типа файла для FIFO-канала.
S_IFLNK Константа типа файла для символической ссылки.
S_IFSOCK Константа типа файла для сокета.

В Windows доступны только S_IFCHR, S_IFDIR, S_IFLNK, S_IFMT и S_IFREG.

Константы режимов файлов

Следующие константы предназначены для использования со свойством mode объекта <fs.Stats> для определения прав доступа к файлу.

Константа Описание
S_IRWXU Режим файла, указывающий на наличие у владельца прав на чтение, запись и выполнение.
S_IRUSR Режим файла, указывающий на наличие у владельца права на чтение.
S_IWUSR Режим файла, указывающий на наличие у владельца права на запись.
S_IXUSR Режим файла, указывающий на наличие у владельца права на выполнение.
S_IRWXG Режим файла, указывающий на наличие у группы прав на чтение, запись и выполнение.
S_IRGRP Режим файла, указывающий на наличие у группы права на чтение.
S_IWGRP Режим файла, указывающий на наличие у группы права на запись.
S_IXGRP Режим файла, указывающий на наличие у группы права на выполнение.
S_IRWXO Режим файла, указывающий на наличие у остальных пользователей прав на чтение, запись и выполнение.
S_IROTH Режим файла, указывающий на наличие у остальных пользователей права на чтение.
S_IWOTH Режим файла, указывающий на наличие у остальных пользователей права на запись.
S_IXOTH Режим файла, указывающий на наличие у остальных пользователей права на выполнение.

В Windows доступны только S_IRUSR и S_IWUSR.

Примечания

Порядок выполнения операций с обратными вызовами и промисами

Поскольку эти операции выполняются асинхронно в базовом пуле потоков, при использовании методов с обратными вызовами или промисами порядок их выполнения не гарантируется.

Например, следующий код может привести к ошибке, поскольку операция fs.stat() может завершиться раньше операции fs.rename():

const fs = require('node:fs');

fs.rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  console.log('renamed complete');
});
fs.stat('/tmp/world', (err, stats) => {
  if (err) throw err;
  console.log(`stats: ${JSON.stringify(stats)}`);
});
jscopy

Важно правильно упорядочивать операции, ожидая результата одной из них, прежде чем вызывать другую:

Модули JavaScript
import { rename, stat } from 'node:fs/promises';

const oldPath = '/tmp/hello';
const newPath = '/tmp/world';

try {
  await rename(oldPath, newPath);
  const stats = await stat(newPath);
  console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
  console.error('there was an error:', error.message);
}
CommonJS
const { rename, stat } = require('node:fs/promises');

(async function(oldPath, newPath) {
  try {
    await rename(oldPath, newPath);
    const stats = await stat(newPath);
    console.log(`stats: ${JSON.stringify(stats)}`);
  } catch (error) {
    console.error('there was an error:', error.message);
  }
})('/tmp/hello', '/tmp/world');

При использовании API с обратными вызовами вызов fs.stat() следует поместить в обратный вызов операции fs.rename():

Модули JavaScript
import { rename, stat } from 'node:fs';

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});
CommonJS
const { rename, stat } = require('node:fs/promises');

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});

Пути к файлам

Большинство операций fs принимают пути к файлам, которые можно указать в виде строки, объекта <Buffer> или объекта <URL> с использованием протокола file:.

Строковые пути

Строковые пути интерпретируются как последовательности символов UTF-8, задающие абсолютное или относительное имя файла. Относительные пути разрешаются относительно текущего рабочего каталога, определяемого вызовом process.cwd().

Пример с абсолютным путем в POSIX:

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

let fd;
try {
  fd = await open('/open/some/file.txt', 'r');
  // Do something with the file
} finally {
  await fd?.close();
}
mjscopy

Пример с относительным путем в POSIX (относительно process.cwd()):

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

let fd;
try {
  fd = await open('file.txt', 'r');
  // Do something with the file
} finally {
  await fd?.close();
}
mjscopy
Пути в URL файлов
Добавлено в: v7.6.0

Для большинства функций модуля node:fs аргумент path или filename можно передать как объект <URL> с использованием протокола file:.

import { readFileSync } from 'node:fs';

readFileSync(new URL('file:///tmp/hello'));
mjscopy

URL-адреса file: всегда являются абсолютными путями.

Особенности платформ

В Windows объекты <URL> file: с именем хоста преобразуются в пути UNC, а объекты <URL> file: с буквой диска — в локальные абсолютные пути. Объекты <URL> file: без имени хоста и буквы диска приведут к ошибке:

import { readFileSync } from 'node:fs';
// On Windows :

// - WHATWG file URLs with hostname convert to UNC path
// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
readFileSync(new URL('file://hostname/p/a/t/h/file'));

// - WHATWG file URLs with drive letters convert to absolute path
// file:///C:/tmp/hello => C:\tmp\hello
readFileSync(new URL('file:///C:/tmp/hello'));

// - WHATWG file URLs without hostname must have a drive letters
readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
readFileSync(new URL('file:///c/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute
mjscopy

Объекты <URL> file: с буквами дисков должны использовать : в качестве разделителя сразу после буквы диска. Использование другого разделителя приведет к ошибке.

На всех остальных платформах объекты <URL> file: с именем хоста не поддерживаются и приведут к ошибке:

import { readFileSync } from 'node:fs';
// On other platforms:

// - WHATWG file URLs with hostname are unsupported
// file://hostname/p/a/t/h/file => throw!
readFileSync(new URL('file://hostname/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute

// - WHATWG file URLs convert to absolute path
// file:///tmp/hello => /tmp/hello
readFileSync(new URL('file:///tmp/hello'));
mjscopy

Объект <URL> file: с закодированными символами косой черты приведет к ошибке на всех платформах:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */

// On POSIX
readFileSync(new URL('file:///p/a/t/h/%2F'));
readFileSync(new URL('file:///p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
/ characters */
mjscopy

В Windows объекты <URL> file: с закодированной обратной косой чертой приведут к ошибке:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/path/%5C'));
readFileSync(new URL('file:///C:/path/%5c'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */
mjscopy
Пути Buffer

Пути, заданные с помощью объекта <Buffer>, полезны главным образом в некоторых POSIX-совместимых операционных системах, которые рассматривают пути к файлам как непрозрачные последовательности байтов. В таких системах один путь к файлу может содержать последовательности байтов в нескольких кодировках. Как и строковые пути, пути <Buffer> могут быть относительными или абсолютными:

Пример с абсолютным путем в POSIX:

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

let fd;
try {
  fd = await open(Buffer.from('/open/some/file.txt'), 'r');
  // Do something with the file
} finally {
  await fd?.close();
}
mjscopy
Отдельные рабочие каталоги для дисков в Windows

В Windows Node.js следует концепции отдельных рабочих каталогов для каждого диска. Это поведение можно наблюдать при использовании пути к диску без обратной косой черты. Например, fs.readdirSync('C:\\') может вернуть результат, отличный от результата fs.readdirSync('C:'). Дополнительные сведения см. на этой странице MSDN.

Дескрипторы файлов

В POSIX-системах ядро поддерживает для каждого процесса таблицу открытых в данный момент файлов и ресурсов. Каждому открытому файлу присваивается простой числовой идентификатор, называемый дескриптором файла. На уровне системы все операции с файловой системой используют эти дескрипторы для идентификации и отслеживания каждого отдельного файла. В системах Windows для отслеживания ресурсов используется другой, но концептуально схожий механизм. Чтобы упростить работу пользователей, Node.js скрывает различия между операционными системами и присваивает всем открытым файлам числовой дескриптор.

Методы fs.open() с обратным вызовом и fs.openSync() для синхронного выполнения открывают файл и выделяют новый дескриптор файла. После выделения дескриптор можно использовать для чтения данных из файла, записи данных в файл или получения сведений о файле.

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

import { open, close, fstat } from 'node:fs';

function closeFd(fd) {
  close(fd, (err) => {
    if (err) throw err;
  });
}

open('/open/some/file.txt', 'r', (err, fd) => {
  if (err) throw err;
  try {
    fstat(fd, (err, stat) => {
      if (err) {
        closeFd(fd);
        throw err;
      }

      // use stat

      closeFd(fd);
    });
  } catch (err) {
    closeFd(fd);
    throw err;
  }
});
mjscopy

В API на основе промисов вместо числового дескриптора файла используется объект <FileHandle>. Система лучше управляет такими объектами, чтобы предотвращать утечки ресурсов. Тем не менее после завершения операций их всё равно необходимо закрывать:

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

let file;
try {
  file = await open('/open/some/file.txt', 'r');
  const stat = await file.stat();
  // use stat
} finally {
  await file.close();
}
mjscopy

Использование пула потоков

Все API файловой системы с обратными вызовами и на основе промисов (за исключением fs.FSWatcher()) используют пул потоков libuv. Для некоторых приложений это может иметь неожиданные и негативные последствия для производительности. Подробнее см. в документации UV_THREADPOOL_SIZE.

Флаги файловой системы

Следующие флаги доступны везде, где параметр flag принимает строку.

  • 'a': открыть файл для добавления данных. Если файл не существует, он будет создан.

  • 'ax': как 'a', но операция завершается ошибкой, если путь существует.

  • 'a+': открыть файл для чтения и добавления данных. Если файл не существует, он будет создан.

  • 'ax+': как 'a+', но операция завершается ошибкой, если путь существует.

  • 'as': открыть файл для добавления данных в синхронном режиме. Если файл не существует, он будет создан.

  • 'as+': открыть файл для чтения и добавления данных в синхронном режиме. Если файл не существует, он будет создан.

  • 'r': открыть файл для чтения. Если файл не существует, возникает исключение.

  • 'rs': открыть файл для чтения в синхронном режиме. Если файл не существует, возникает исключение.

  • 'r+': открыть файл для чтения и записи. Если файл не существует, возникает исключение.

  • 'rs+': открыть файл для чтения и записи в синхронном режиме. Указывает операционной системе обходить кеш локальной файловой системы.

    Это особенно полезно при открытии файлов на подключениях NFS, поскольку позволяет обойти потенциально устаревший локальный кеш. Этот флаг существенно влияет на производительность ввода-вывода, поэтому его не рекомендуется использовать без необходимости.

    Этот флаг не превращает fs.open() или fsPromises.open() в синхронный блокирующий вызов. Если требуется синхронная операция, следует использовать что-то вроде fs.openSync().

  • 'w': открыть файл для записи. Файл будет создан, если он не существует, или усечён, если существует.

  • 'wx': как 'w', но операция завершается ошибкой, если путь существует.

  • 'w+': открыть файл для чтения и записи. Файл будет создан, если он не существует, или усечён, если существует.

  • 'wx+': как 'w+', но операция завершается ошибкой, если путь существует.

flag также может быть числом, как описано в open(2); часто используемые константы доступны из fs.constants. В Windows флаги преобразуются в соответствующие эквиваленты, если они существуют, например O_WRONLY в FILE_GENERIC_WRITE или O_EXCL|O_CREAT в CREATE_NEW, принимаемые CreateFileW.

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

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

Для изменения файла, а не его замены, может потребоваться установить параметр flag в значение 'r+' вместо значения по умолчанию 'w'.

Поведение некоторых флагов зависит от платформы. Поэтому попытка открыть каталог в macOS и Linux с флагом 'a+', как в примере ниже, приведёт к ошибке. В Windows и FreeBSD, напротив, будет возвращён дескриптор файла или FileHandle.

// macOS and Linux
fs.open('<directory>', 'a+', (err, fd) => {
  // => [Error: EISDIR: illegal operation on a directory, open <directory>]
});

// Windows and FreeBSD
fs.open('<directory>', 'a+', (err, fd) => {
  // => null, <fd>
});
jscopy

В Windows попытка открыть существующий скрытый файл с флагом 'w' (через fs.open(), fs.writeFile() или fsPromises.open()) завершится ошибкой EPERM. Существующие скрытые файлы можно открыть для записи с флагом 'r+'.

Для сброса содержимого файла можно использовать вызов fs.ftruncate() или filehandle.truncate().

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/api/fs.html

Spec-Zone.ru

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