Spec-Zone.ru › Node.js 20 LTS

Система файлов

Уровень стабильности: 2 - Стабильно

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

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

Для использования API на основе обещаний:

Модули MJS

import * as fs from 'node:fs/promises';

Модули CJS

const fs = require('node:fs/promises');

Для использования API с обратными вызовами и синхронного API:

Модули MJS

import * as fs from 'node:fs';

Модули CJS

const fs = require('node:fs');

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

Пример с обещанием

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

Модули MJS

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

Модули CJS

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.

Модули MJS

import { unlink } from 'node:fs';

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

Модули CJS

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, или может быть допущено до всплытия.

Модули MJS

import { unlinkSync } from 'node:fs';

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

Модули CJS

const { unlinkSync } = require('node:fs');

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

API обещаний

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

Выведено как require('fs/promises').

v11.14.0, v10.17.0

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

v10.1.0

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

v10.0.0

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

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])
История
Версия Изменения
v20.10.0

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

v15.14.0, v14.18.0

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

v14.0.0

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

v10.0.0

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

  • data <string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Iterable> | <Stream>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • flush <boolean> Если true, внутренний дескриптор файла будет сброшен перед закрытием. По умолчанию: false.
  • Возвращает: <Promise> При успехе возвращает undefined.

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

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

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

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

filehandle.chown(uid, gid)
Добавлен в: v10.0.0
  • uid <целое> Новый идентификатор пользователя владельца файла.
  • gid <целое> Новый идентификатор группы группы файла.
  • Возвращает: <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();
} copy
filehandle.createReadStream([options])
Добавлен в: v16.11.0
  • options <Объект>
    • encoding <строка> По умолчанию: null
    • autoClose <логическое> По умолчанию: true
    • emitClose <логическое> По умолчанию: true
    • start <целое>
    • end <целое> По умолчанию: Infinity
    • highWaterMark <целое> По умолчанию: 64 * 1024
  • Возвращает: <fs.ReadStream>

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

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

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

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

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

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

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

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

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

const fd = await open('sample.txt');
fd.createReadStream({ start: 90, end: 99 }); copy
filehandle.createWriteStream([options])
История
Версия Изменения
v20.10.0

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

v16.11.0

Добавлен в: v16.11.0

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

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

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

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

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

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

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

filehandle.fd
Добавлена в: v10.0.0
  • <число> Численный дескриптор файла, управляемый объектом <Дескриптор файла>.
filehandle.read(buffer, offset, length, position)
Добавлена в: v10.0.0
  • buffer <Буфер> | <Массив типов> | <DataView> Буфер, который будет заполнен данными из файла.
  • offset <целое число> Позиция в буфере, с которой начинается заполнение. По умолчанию: 0
  • length <целое число> Количество байтов для чтения. По умолчанию: buffer.byteLength - offset
  • position <целое число> | <BigInt> | <null> Позиция, с которой начать чтение данных из файла. Если null или -1, данные будут считаны с текущей позиции файла, и позиция будет обновлена. Если position — это целое число без знака, текущая позиция файла останется неизменной. По умолчанию: null
  • Возвращает: <Обещание> Выполняется при успехе с объектом, содержащим две свойства:
    • bytesRead <целое число> Количество прочитанных байтов
    • buffer <Буфер> | <Массив типов> | <DataView> Ссылка на переданный аргумент buffer.

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

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

filehandle.read([options])
Добавлена в: v13.11.0, v12.17.0
  • options <Объект>
    • buffer <Буфер> | <Массив типов> | <DataView> Буфер, который будет заполнен данными из файла. По умолчанию: Buffer.alloc(16384)
    • offset <целое число> Позиция в буфере, с которой начинается заполнение. По умолчанию: 0
    • length <целое число> Количество байтов для чтения. По умолчанию: buffer.byteLength - offset
    • position <целое число> | <null> Позиция, с которой начать чтение данных из файла. Если null, данные будут считаны с текущей позиции файла, и позиция будет обновлена. Если position — целое число, текущая позиция файла останется неизменной. По умолчанию: null
  • Возвращает: <Обещание> Выполняется при успехе с объектом, содержащим две свойства:
    • bytesRead <целое число> Количество прочитанных байтов
    • buffer <Буфер> | <Массив типов> | <DataView> Ссылка на переданный аргумент buffer.

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

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

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

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

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

filehandle.readableWebStream([options])
История
Версия Изменения
v20.0.0

Добавлен параметр для создания потока байтов.

v17.0.0

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

Стабильность: 1 - Экспериментальная
  • options <Object>

    • type <string> | <undefined> Выбор открытия обычного или 'bytes' потока. По умолчанию: undefined
  • Возвращает: <ReadableStream>

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

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

MJS модули

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

CJS модули

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().

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

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

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

filehandle.read() должен поддерживать чтение.

Если несколько 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() для параметров.

MJS модули

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

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

for await (const line of file.readLines()) {
  console.log(line);
}

CJS модули

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.5.0

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

v10.0.0

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

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

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

filehandle.truncate(len)
Добавлен в: v10.0.0
  • len <целое число> По умолчанию: 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();
} copy

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

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

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

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

filehandle.write(buffer, offset[, length[, position]])
История
Версия Изменения
v14.0.0

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

v10.0.0

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

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

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

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

  • bytesWritten <целое число> количество записанных байт
  • buffer <Буфер> | <Тип массива> | <DataView> ссылка на записанный buffer.

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

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

filehandle.write(buffer[, options])
Добавлен в: v18.3.0, v16.17.0
  • buffer <Буфер> | <Тип массива> | <DataView>
  • options <Объект>
    • offset <целое число> По умолчанию: 0
    • length <целое число> По умолчанию: buffer.byteLength - offset
    • position <целое число> По умолчанию: null
  • Возвращает: <Promise>

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

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

filehandle.write(string[, position[, encoding]])
История
Версия Изменения
v14.0.0

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

v10.0.0

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

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

Записать string в файл. Если string не является строкой, обещание отклоняется с ошибкой.

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

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

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

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

filehandle.writeFile(data, options)
История
Версия Изменения
v15.14.0, v14.18.0

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

v14.0.0

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

v10.0.0

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

  • data <строка> | <Буфер> | <Массив типов> | <DataView> | <Асинхронно-итерируемый> | <Итерируемый> | <Поток>
  • options <Объект> | <строка>
    • encoding <строка> | <null> Ожидаемая кодировка символов, когда data является строкой. По умолчанию: 'utf8'
  • Возвращает: <Обещание>

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

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

У <Дескриптор файла> должен быть доступ к записи.

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

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

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

Записывает массив <Представлений массивов буферов> в файл.

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

  • bytesWritten <целое> число записанных байтов
  • buffers <Массив буферов> | <Массив массивов типов> | <Массив DataView> ссылка на входной buffers.

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

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

filehandle[Symbol.asyncDispose]()
Добавлен в: v20.4.0
Уровень стабильности: 1 - Экспериментальный

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

fsPromises.access(path[, mode])

Добавлен в: v10.0.0
  • path <строка> | <Буфер> | <URL>
  • mode <целое> По умолчанию: fs.constants.F_OK
  • Возвращает: <Обещание> Выполняется с 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.

Если проверка доступности успешна, обещание выполняется без значения. Если любая из проверок доступности завершается неудачей, обещание отклоняется с объектом <Ошибка>. В следующем примере проверяется, может ли файл /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');
} copy

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

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

История
Версия Изменения
v20.10.0

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

v10.0.0

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

  • path <строка> | <Буфер> | <URL> | <Дескриптор файла> имя файла или <Дескриптор файла>
  • data <строка> | <Буфер>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'a'.
    • flush <логическое> Если true, базовый дескриптор файла сбрасывается перед его закрытием. По умолчанию: false.
  • Возвращает: <Обещание> Выполняется с undefined при успехе.

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

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

Опция mode влияет только на вновь созданный файл. См. fs.open() для получения дополнительных сведений.

path может быть задан как <дескриптор файла>, открытый для добавления (с использованием fsPromises.open()).

fsPromises.chmod(path, mode)

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

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

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

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

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

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

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

Изменено аргумент flags на mode и применена более строгая валидация типов.

v10.0.0

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

  • 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. Если платформа не поддерживает copy-on-write, используется резервный механизм копирования.
    • fs.constants.COPYFILE_FICLONE_FORCE: Операция копирования попытается создать копию с использованием reflink. Если платформа не поддерживает copy-on-write, операция завершится ошибкой.
  • Возвращает: <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');
} copy

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

История
Версия Изменения
v20.1.0

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

v17.6.0, v16.15.0

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

v16.7.0

Добавлена в: v16.7.0

Уровень стабильности: 1 - Экспериментальная
  • 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>
    • force <boolean> перезаписывать существующий файл или каталог. Операция копирования проигнорирует ошибки, если вы установите это значение в false, а цель существует. Используйте параметр errorOnExist, чтобы изменить это поведение. По умолчанию: true.
    • mode <integer> модификаторы для операции копирования. По умолчанию: 0. См. флаг mode в fsPromises.copyFile().
    • preserveTimestamps <boolean> сохранять отметки времени из src. По умолчанию: false.
    • recursive <boolean> рекурсивное копирование каталогов. По умолчанию: false
    • verbatimSymlinks <boolean> при true, разрешение путей для символических ссылок будет пропущено. По умолчанию: false
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

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

fsPromises.lchmod(path, mode)

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

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

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

fsPromises.lchown(path, uid, gid)

История
Версия Изменения
v10.6.0

Этот API больше не устарел.

v10.0.0

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

  • path <строка> | <Buffer> | <URL>
  • uid <целое>
  • gid <целое>
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

fsPromises.lutimes(path, atime, mtime)

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

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

fsPromises.link(existingPath, newPath)

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

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

fsPromises.lstat(path[, options])

История
Версия Изменения
v10.5.0

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

v10.0.0

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

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

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

fsPromises.mkdir(path[, options])

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

Асинхронно создаёт директорию.

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

Модули MJS

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

Модули CJS

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])

История
Версия Изменения
v20.6.0

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

v16.5.0, v14.18.0

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

v10.0.0

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

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

Создаёт уникальную временную директорию. Уникальное имя директории генерируется путём добавления шести случайных символов в конец предоставленного prefix. Избегайте слеша в конце prefix из-за несовместимостей платформ. Некоторые платформы, особенно BSD, могут возвращать более шести случайных символов и заменять хвостовые слеши в 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);
} copy

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

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

История
Версия Изменения
v11.1.0

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

v10.0.0

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

  • path <строка> | <Буфер> | <URL>
  • flags <строка> | <число> См. поддержку флагов файловой системы flags. По умолчанию: 'r'.
  • mode <строка> | <целое> Устанавливает режим файла (разрешения и биты «только для чтения») при создании файла. По умолчанию: 0o666 (для чтения и записи)
  • Возвращает: <Promise> Выполняется с объектом <FileHandle>.

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

Для получения более подробной информации обратитесь к документации POSIX open(2).

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

fsPromises.opendir(path[, options])

История
Версия Изменения
v20.1.0

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

v13.1.0, v12.16.0

Введён параметр bufferSize.

v12.12.0

Добавлен в: v12.12.0

  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • bufferSize <число> Количество записей каталога, которые буферизуются во время чтения из каталога. Более высокие значения приводят к лучшей производительности, но и к большему потреблению памяти. По умолчанию: 32
    • recursive <логическое> Результатом 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);
} copy

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

fsPromises.readdir(path[, options])

История
Версия Изменения
v20.1.0

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

v10.11.0

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

v10.0.0

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

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

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

Необязательный параметр options может быть строкой, определяющей кодировку, или объектом с свойством encoding, определяющим кодировку символов для имён файлов. Если encoding установлено в '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);
} copy

fsPromises.readFile(path[, options])

История
Версия Изменения
v15.2.0, v14.17.0

В параметре options может быть включён AbortSignal для отмены запроса readFile.

v10.0.0

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

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

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

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

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

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

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

MJS модули

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

CJS модули

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);
} copy

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

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

fsPromises.readlink(path[, options])

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

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

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

fsPromises.realpath(path[, options])

Добавлена в: v10.0.0
  • path <string> | <Buffer> | <URL>
  • options <string> | <Объект>
    • 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])

История
Версия Изменения
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.

v10.0.0

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

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

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

fsPromises.stat(path[, options])

История
Версия Изменения
v10.5.0

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

v10.0.0

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

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

fsPromises.statfs(path[, options])

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

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

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

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

v10.0.0

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

  • target <строка> | <Буфер> | <URL>
  • path <строка> | <Буфер> | <URL>
  • type <строка> | <null> По умолчанию: null
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

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

fsPromises.truncate(path[, len])

Добавлена в: v10.0.0
  • path <строка> | <Буфер> | <URL>
  • len <целое число> По умолчанию: 0
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

fsPromises.unlink(path)

Добавлена в: v10.0.0
  • path <строка> | <Буфер> | <URL>
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

fsPromises.utimes(path, atime, mtime)

Добавлена в: v10.0.0
  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

Аргументы atime и mtime следуют этим правилам:

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

fsPromises.watch(filename[, options])

Добавлена в: v15.9.0, v14.18.0
  • filename <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • persistent <логическое> Указывает, следует ли продолжать процесс, пока отслеживаются файлы. По умолчанию: true.
    • recursive <логическое> Указывает, следует ли отслеживать все подкаталоги или только текущий каталог. Это относится к случаю, когда указан каталог, и только на поддерживаемых платформах (см. примечания). По умолчанию: false.
    • encoding <строка> Указывает кодировку символов, которая должна использоваться для имени файла, переданного обработчику. По умолчанию: 'utf8'.
    • signal <AbortSignal> <AbortSignal>, используемый для сигнализации о необходимости остановки наблюдателя.
  • Возвращает: <Асинхронный итератор> объектов со свойствами:
    • eventType <строка> Тип изменения
    • filename <строка> | <Буфер> | <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;
  }
})(); copy

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

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

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

История
Версия Изменения
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 больше не будет приводить неподдерживаемые входные данные к строкам.

v10.0.0

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

  • file <строка> | <Буфер> | <URL> | <Дескриптор файла> имя файла или FileHandle
  • data <строка> | <Буфер> | <Массив типов> | <DataView> | <Асинхронно-итерируемый> | <Итерируемый> | <Поток>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> Смотрите поддержку флагов файловой системы flags. По умолчанию: 'w'.
    • flush <логическое> Если все данные успешно записаны в файл, а flush равно true, используется filehandle.sync() для записи данных. По умолчанию: false.
    • signal <AbortSignal> позволяет прервать текущую запись файла
  • Возвращает: <Promise> Выполняется с undefined при успехе.

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

Опция encoding игнорируется, если data является буфером.

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

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

Любой указанный <Дескриптор файла> должен поддерживать запись.

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

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

Можно использовать <AbortSignal> для отмены fsPromises.writeFile(). Отмена выполняется по возможности, и, вероятно, будет записано некоторое количество данных.

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);
} copy

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

fsPromises.constants

Добавлен в: v18.4.0, v16.17.0
  • <Объект>

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

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

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

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

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

История
Версия Изменения
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, чтобы работать со всеми версиями.

v0.11.15

Добавлен в: v0.11.15

  • path <строка> | <Buffer> | <URL>
  • mode <целое число> По умолчанию: fs.constants.F_OK
  • callback <Функция>
    • err <Ошибка>

Проверяет разрешения пользователя для файла или каталога, указанного в 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`);
}); copy

Не используйте 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;
      });
    }
  });
}); copy

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

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;
    });
  }
}); copy

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

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;
      });
    }
  });
}); copy

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

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;
    });
  }
}); copy

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

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

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

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

История
Версия Изменения
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 может быть дескриптором файла.

v0.6.7

Добавлен в: v0.6.7

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

Асинхронно добавляет данные в файл, создавая его, если он ещё не существует. 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!');
}); copy

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

import { appendFile } from 'node:fs';

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

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;
  }
}); copy

fs.chmod(path, mode, callback)

История
Версия Изменения
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.

v0.1.30

Добавлен в: v0.1.30

  • path <строка> | <Buffer> | <URL>
  • mode <строка> | <целое число>
  • callback <Функция>
    • err <Ошибка>

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

См. документацию 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!');
}); copy
Режимы файлов
END_OF_DOCUMENT_MARKER

Аргумент 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)

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

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

v10.0.0

Параметр callback больше не является необязательным. Отсутствие его приведёт к сбою в процессе выполнения.

v7.6.0

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

v7.0.0

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

v0.1.97

Добавлена в: v0.1.97

  • path <строка> | <Буфер> | <URL>
  • uid <целое число>
  • gid <целое число>
  • callback <Функция>
    • err <Ошибка>

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

См. документацию POSIX chown(2) для более подробной информации.

fs.close(fd[, callback])

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

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

v15.9.0, v14.17.0

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

v10.0.0

Параметр callback больше не является необязательным. Отсутствие его приведёт к сбою в процессе выполнения.

v7.0.0

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

v0.0.2

Добавлена в: v0.0.2

  • fd <целое число>
  • callback <Функция>
    • err <Ошибка>

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

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

См. документацию POSIX close(2) для более подробной информации.

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

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

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

v14.0.0

Изменён аргумент flags на mode и введён более жёсткий контроль типов.

v8.5.0

Добавлена в: v8.5.0

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

Асинхронно копирует 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: Операция копирования попытается создать ссылку с копированием при записи. Если платформа не поддерживает копирование при записи, используется резервный механизм копирования.
  • fs.constants.COPYFILE_FICLONE_FORCE: Операция копирования попытается создать ссылку с копированием при записи. Если платформа не поддерживает копирование при записи, операция завершится ошибкой.
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); copy

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

История
Версия Изменения
v20.1.0

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

v18.0.0

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

v17.6.0, v16.15.0

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

v16.7.0

Добавлена в: v16.7.0

Стабильность: 1 - Экспериментальная
  • 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>
    • force <boolean> перезаписать существующий файл или каталог. Операция копирования проигнорирует ошибки, если вы установите это значение в false, а назначение уже существует. Используйте опцию errorOnExist для изменения этого поведения. По умолчанию: true.
    • mode <integer> модификаторы для операции копирования. По умолчанию: 0. См. флаг mode в fs.copyFile().
    • preserveTimestamps <boolean> сохранять временные метки из src. По умолчанию: false.
    • recursive <boolean> рекурсивно копировать каталоги По умолчанию: false
    • verbatimSymlinks <boolean> при значении true, разрешение путей для символических ссылок будет пропущено. По умолчанию: false
  • callback <Function>

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

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

fs.createReadStream(path[, options])

История
Версия Изменения
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 теперь может быть строкой.

v0.1.31

Добавлена в: v0.1.31

  • 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>

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

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

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

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

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

import { createReadStream } from 'node:fs';

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

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

fs.createWriteStream(path[, options])

История
Версия Изменения
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 теперь может быть строкой.

v0.1.31

Добавлен в: v0.1.31

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

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

Если autoClose установлено в true (по умолчанию), при 'error' или 'finish' дескриптор файла будет закрыт автоматически. Если 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)

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

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

v7.6.0

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

v1.0.0

Устаревший с: v1.0.0

v0.0.2

Добавлен в: v0.0.2

Уровень стабильности: 0 - Устаревший: Используйте fs.stat() или fs.access() вместо него.
  • path <строка> | <Буфер> | <URL>
  • callback <Функция>
    • exists <логическое значение>

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

import { exists } from 'node:fs';

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

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

Использование 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;
        });
      }
    });
  }
}); copy

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

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;
    });
  }
}); copy

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

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');
  }
}); copy

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

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;
    });
  }
}); copy

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

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

fs.fchmod(fd, mode, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

Добавлен в: v0.4.7

  • fd <целое>
  • mode <строка> | <целое>
  • callback <Функция>
    • err <Ошибка>

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

См. документацию POSIX fchmod(2) для получения более подробной информации.

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

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

Добавлен в: v0.4.7

  • fd <целое>
  • uid <целое>
  • gid <целое>
  • callback <Функция>
    • err <Ошибка>

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

См. документацию POSIX fchown(2) для получения более подробной информации.

fs.fdatasync(fd, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.1.96

Добавлен в: v0.1.96

  • fd <целое>
  • callback <Функция>
    • err <Ошибка>

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

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

История
Версия Изменения
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.

v0.1.95

Добавлен в: v0.1.95

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

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

См. документацию POSIX fstat(2) для получения более подробной информации.

fs.fsync(fd, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.1.96

Добавлен в: v0.1.96

  • fd <целое>
  • callback <Функция>
    • err <Ошибка>

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

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

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

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

v10.0.0

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

v7.0.0

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

v0.8.6

Добавлен в: v0.8.6

  • fd <целое>
  • len <целое> По умолчанию: 0
  • callback <Функция>
    • err <Ошибка>

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

Для получения дополнительной информации см. документацию 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;
  }
}); copy

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

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

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

История
Версия Изменения
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.

v0.4.2

Добавлена в: v0.4.2

  • fd <целое>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>
  • callback <Функция>
    • err <Ошибка>

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

fs.lchmod(path, mode, callback)

История
Версия Изменения
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.

v0.4.7

Устарело начиная с: v0.4.7

  • path <строка> | <Буфер> | <URL>
  • mode <целое>
  • callback <Функция>
    • err <Ошибка> | <Собранная ошибка>

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

Этот метод реализован только на 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 <строка> | <Буфер> | <URL>
  • uid <целое>
  • gid <целое>
  • callback <Функция>
    • err <Ошибка>

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

Для получения дополнительной информации см. документацию POSIX lchown(2).

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

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

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

v14.5.0, v12.19.0

Добавлена в: v14.5.0, v12.19.0

  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>
  • callback <Функция>
    • err <Ошибка>

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

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

fs.link(existingPath, newPath, callback)

История
Версия Изменения
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.

v0.1.31

Добавлен в: v0.1.31

  • existingPath <строка> | <Buffer> | <URL>
  • newPath <строка> | <Buffer> | <URL>
  • callback <Функция>
    • err <Ошибка>

Создаёт новую ссылку от existingPath к newPath. Для получения более подробной информации см. документацию POSIX link(2). Обратному вызову не передаются никакие аргументы, кроме возможного исключения.

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

История
Версия Изменения
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.

v0.1.30

Добавлен в: v0.1.30

  • path <строка> | <Buffer> | <URL>
  • options <Объект>
    • bigint <логическое> Являются ли числовые значения в возвращаемом объекте <fs.Stats> типом bigint. По умолчанию: false.
  • callback <Функция>
    • err <Ошибка>
    • stats <fs.Stats>

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

Для получения более подробной информации см. документацию POSIX lstat(2).

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

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

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

v13.11.0, v12.17.0

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

v10.12.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.8

Добавлен в: v0.1.8

  • path <строка> | <Buffer> | <URL>
  • options <Объект> | <целое число>
    • recursive <логическое> По умолчанию: false
    • mode <строка> | <целое число> Не поддерживается в Windows. По умолчанию: 0o777.
  • callback <Функция>
    • err <Ошибка>
    • path <строка> | <неопределённо> Присутствует только если директория создаётся с recursive, установленным в true.

Асинхронно создаёт директорию.

Обратный вызов получает возможные исключения и, если 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;
}); copy

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

import { mkdir } from 'node:fs';

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

Для получения более подробной информации см. документацию POSIX mkdir(2).

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

История
Версия Изменения
v20.6.0

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

v18.0.0

Передача невалидного обратного вызова в аргумент 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 теперь является необязательным.

v5.10.0

Добавлен в: v5.10.0

  • prefix <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • directory <строка>

Создаёт уникальную временную директорию.

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

Путь к созданной директории передаётся как строка во второй параметр обратного вызова.

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

Метод fs.mkdtemp() добавит шесть случайных символов непосредственно к строке prefix. Например, если требуется создать временную директорию внутри /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.
}); copy

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

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

Передача некорректного обратного вызова в аргумент 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:.

v0.0.2

Добавлен в: v0.0.2

  • path <строка> | <Буфер> | <URL>
  • flags <строка> | <число> См. поддержку файловой системы flags. По умолчанию: 'r'.
  • mode <строка> | <целое число> По умолчанию: 0o666 (для чтения и записи)
  • callback <Функция>
    • err <Ошибка>
    • fd <целое число>

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

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

Обратный вызов получает два аргумента (err, fd).

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

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

fs.openAsBlob(path[, options])

Добавлен в: v19.8.0
Уровень стабильности: 1 - Экспериментальный
  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • type <строка> Необязательный тип MIME для blob.
  • Возвращает: <Promise> Выполняется с <Blob> при успехе.

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

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

Модули MJS

import { openAsBlob } from 'node:fs';

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

Модули CJS

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)

История
Версия Изменения
v20.1.0

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

v18.0.0

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

v13.1.0, v12.16.0

Введён параметр bufferSize.

v12.12.0

Добавлен в: v12.12.0

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

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

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

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

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

История
Версия Изменения
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.

v0.0.2

Добавлен в: v0.0.2

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

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

Обратный вызов получает три аргумента: (err, bytesRead, buffer).

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

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

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

Например:

  • Если файл короче указанного length, bytesRead будет установлено в фактическое количество прочитанных байтов.
  • Если в файле встречен конец файла (EOF), прежде чем буфер был заполнен, Node.js прочитает все доступные байты до конца файла, а параметр 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

Добавлен в: v13.11.0, v12.17.0

  • fd <целое>
  • options <Объект>
    • buffer <Буфер> | <Массив с плавающей запятой> | <DataView> По умолчанию: Buffer.alloc(16384)
    • offset <целое> По умолчанию: 0
    • length <целое> По умолчанию: buffer.byteLength - offset
    • position <целое> | <bigint> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesRead <целое>
    • buffer <Буфер>

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

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

Добавлен в: v18.2.0, v16.17.0
  • fd <целое>
  • buffer <Буфер> | <Массив с плавающей запятой> | <DataView> Буфер, в который будут записаны данные.
  • options <Объект>
    • offset <целое> По умолчанию: 0
    • length <целое> По умолчанию: buffer.byteLength - offset
    • position <целое> | <bigint> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesRead <целое>
    • buffer <Буфер>

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

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

История
Версия Изменения
v20.1.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 больше не является необязательным. Отсутствие его передачи выведет предупреждение о устаревании с id DEP0013.

v6.0.0

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

v0.1.8

Добавлен в: v0.1.8

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <булево> По умолчанию: false
    • recursive <булево> Если true, считывает содержимое каталога рекурсивно. В рекурсивном режиме он будет перечислять все файлы, подкаталоги и директории. По умолчанию: false.
  • callback <Функция>
    • err <Ошибка>
    • files <массив строк> | <массив буферов> | <массив fs.Dirent>

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

См. документацию POSIX readdir(3) для более подробной информации.

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

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

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

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

Передача невалидного коллбэка аргументу 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 больше не является необязательным. Отсутствие его передачи выведет предупреждение о устаревании с id DEP0013.

v5.1.0

Функция callback всегда будет вызвана с null в качестве параметра error при успехе.

v5.0.0

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

v0.1.29

Добавлен в: v0.1.29

  • path <строка> | <Буфер> | <URL> | <целое число> имя файла или дескриптор файла
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: null
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'r'.
    • signal <AbortSignal> позволяет прервать запрос readFile
  • callback <Функция>
    • err <Ошибка> | <AggregateError>
    • data <строка> | <Буфер>

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

import { readFile } from 'node:fs';

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

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

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

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

import { readFile } from 'node:fs';

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

Когда путь является каталогом, поведение 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>
}); copy

Возможен отказ от текущего запроса с помощью AbortSignal. Если запрос прерван, коллбэк вызывается с ошибкой 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(); copy

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

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

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

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

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

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

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

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

История
Версия Изменения
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.

v0.1.31

Добавлен в: v0.1.31

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • linkString <строка> | <Буфер>

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

См. документацию POSIX readlink(2) для получения более подробной информации.

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

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

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

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

v13.13.0, v12.17.0

Добавлен в: v13.13.0, v12.17.0

  • fd <целое число>
  • buffers <ArrayBufferView[]>
  • position <целое число> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesRead <целое число>
    • buffers <ArrayBufferView[]>

Читает из файла, указанного в fd, и записывает в массив ArrayBufferView с использованием readv().

position — смещение от начала файла, с которого следует читать данные. Если typeof position !== 'number', данные будут считаны с текущей позиции.

Обратный вызов получит три аргумента: err, bytesRead и buffers. bytesRead — количество байтов, прочитанных из файла.

Если этот метод вызван как его util.promisify() версия, он возвращает обещание для Object с bytesRead и buffers свойствами.

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

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

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

v10.0.0

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

v8.0.0

Поддержка разрешения для труб/сокет добавлена.

v7.6.0

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

v7.0.0

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

v6.4.0

Вызов realpath теперь работает снова для различных граничных случаев в Windows.

v6.0.0

Параметр cache был удалён.

v0.1.31

Добавлен в: v0.1.31

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • resolvedPath <строка> | <Буфер>

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

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

Эта функция работает как realpath(3) с некоторыми исключениями:

  1. Преобразование регистров не выполняется на файловых системах с регистронезависимыми именами.

  2. Максимальное количество символических ссылок зависит от платформы и, как правило, (намного) больше, чем поддерживает реализация родного realpath(3).

Обратный вызов callback получает два аргумента (err, resolvedPath). Может использовать process.cwd для разрешения относительных путей.

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

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

Если path разрешается в сокет или трубу, функция вернёт зависящее от системы имя для этого объекта.

Путь, который не существует, приведёт к ошибке ENOENT. error.path — это абсолютный путь к файлу.

fs.realpath.native(path[, options], callback)

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

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

v9.2.0

Добавлен в: v9.2.0

  • path <строка> | <Buffer> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • resolvedPath <строка> | <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)

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

Передача некорректного коллбэка аргументу 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 больше не является необязательным. Отсутствие его передачи выведет предупреждение об устаревании с id DEP0013.

v0.0.2

Добавлена в: v0.0.2

  • oldPath <строка> | <Buffer> | <URL>
  • newPath <строка> | <Buffer> | <URL>
  • callback <Функция>
    • err <Ошибка>

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

См. также: rename(2).

import { rename } from 'node:fs';

rename('oldFile.txt', 'newFile.txt', (err) => {
  if (err) throw err;
  console.log('Rename complete!');
}); copy

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

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

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

v16.0.0

Использование fs.rmdir(path, { recursive: true }) на файле (не каталоге) больше недопустимо и приводит к ошибке 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 больше не является необязательным. Отсутствие его передачи выведет предупреждение об устаревании с id DEP0013.

v0.0.2

Добавлена в: v0.0.2

  • path <строка> | <Buffer> | <URL>
  • options <Объект>
    • maxRetries <целое> Если встречена ошибка EBUSY, EMFILE, ENFILE, ENOTEMPTY или EPERM, Node.js повторит операцию с линейной задержкой ожидания retryDelay миллисекунд больше при каждой попытке. Эта опция представляет количество повторов. Эта опция игнорируется, если опция recursive не равна true. По умолчанию: 0.
    • recursive <булево> Если true, выполнить рекурсивное удаление каталога. В рекурсивном режиме операции повторяются при неудаче. По умолчанию: false. Устарело.
    • retryDelay <целое> Время ожидания в миллисекундах между повторными попытками. Эта опция игнорируется, если опция recursive не равна true. По умолчанию: 100.
  • callback <Функция>
    • err <Ошибка>

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

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

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

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

История
Версия Изменения
v17.3.0, v16.14.0

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

v14.14.0

Добавлена в: 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.
  • callback <Function>
    • err <Error>

Асинхронно удаляет файлы и каталоги (моделируется по стандартной утилите POSIX rm). Никаких аргументов, кроме возможного исключения, не передается обратной функции завершения.

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

История
Версия Изменения
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 больше не является необязательным. Отсутствие его передачи вызовет предупреждение о устаревании с id DEP0013.

v0.0.2

Добавлен в: v0.0.2

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Следует ли представлять числовые значения в возвращаемом объекте <fs.Stats> в виде bigint. По умолчанию: false.
  • 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 copy

Следующая программа проверит статистику по заданным путям:

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);
  });
} copy

Результат будет примерно таким:

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
}
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
} copy

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)

История
Версия Изменения
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:. Поддержка пока ещё экспериментальная.

v0.1.31

Добавлен в: v0.1.31

  • 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 не является строкой, Node.js автоматически определит тип target и использует 'file' или 'dir'. Если target не существует, будет использовано значение 'file'. Для символических ссылок Windows (junction points) путь к назначению должен быть абсолютным. При использовании 'junction', аргумент target автоматически будет приведен к абсолютному пути. Символические ссылки NTFS могут указывать только на каталоги.

Относительные целевые пути относительны к родительскому каталогу ссылки.

import { symlink } from 'node:fs';

symlink('./mew', './mewtwo', callback); copy

Приведённый выше пример создаёт символическую ссылку mewtwo, которая указывает на mew в том же каталоге:

$ tree .
.
├── mew
└── mewtwo -> ./mew copy

fs.truncate(path[, len], callback)

История
Версия Изменения
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.

v0.8.6

Добавлена в: v0.8.6

  • path <строка> | <Буфер> | <URL>
  • len <целое число> По умолчанию: 0
  • callback <Функция>
    • err <Ошибка> | <Суммарная ошибка>

Усекает файл. В колбэк-функцию, кроме возможного исключения, не передаются другие аргументы. Также можно передать дескриптор файла в качестве первого аргумента. В этом случае вызывается fs.ftruncate().

MJS модули

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');
});

CJS модули

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)

История
Версия Изменения
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.

v0.0.2

Добавлена в: v0.0.2

  • path <строка> | <Буфер> | <URL>
  • callback <Функция>
    • err <Ошибка>

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

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');
}); copy

fs.unlink() не будет работать с каталогом, пустым или нет. Для удаления каталога используйте fs.rmdir().

См. документацию POSIX unlink(2) для получения дополнительной информации.

fs.unwatchFile(filename[, listener])

Добавлена в: v0.1.31
  • filename <строка> | <Буфер> | <URL>
  • listener <Функция> Необязательно, ранее прикрепленный слушатель с помощью fs.watchFile()

Остановить наблюдение за изменениями в filename. Если указан listener, удаляется только этот слушатель. В противном случае, удаляются *все* слушатели, фактически останавливая наблюдение за filename.

Вызов fs.unwatchFile() с именем файла, за которым не ведётся наблюдение, является операцией без эффекта, а не ошибкой.

Использование fs.watch() более эффективно, чем fs.watchFile() и fs.unwatchFile(). fs.watch() следует использовать вместо fs.watchFile() и fs.unwatchFile(), когда это возможно.

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

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

Передача некорректного колбэка в аргумент 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 теперь являются допустимыми спецификаторами времени.

v0.4.2

Добавлена в: v0.4.2

  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>
  • callback <Функция>
    • err <Ошибка>

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

Аргументы atime и mtime следуют этим правилам:

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

fs.watch(filename[, options][, listener])

История
Версия Изменения
v19.1.0

Добавлена рекурсивная поддержка для Linux, AIX и IBMi.

v15.9.0, v14.17.0

Добавлена поддержка закрытия наблюдателя с помощью объекта AbortSignal.

v7.6.0

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

v7.0.0

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

v0.5.10

Добавлена в: v0.5.10

  • filename <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • persistent <логическое> Указывает, следует ли процессу продолжать работу до тех пор, пока файлы отслеживаются. По умолчанию: true.
    • recursive <логическое> Указывает, следует ли отслеживать все подкаталоги или только текущий каталог. Это применимо, когда указан каталог, и только на поддерживаемых платформах (см. примечания). По умолчанию: false.
    • encoding <строка> Указывает кодировку символов, которая должна использоваться для имени файла, передаваемого слушателю. По умолчанию: 'utf8'.
    • signal <AbortSignal> позволяет закрыть наблюдатель с помощью AbortSignal.
  • listener <Функция> | <неопределено> По умолчанию: undefined
    • eventType <строка>
    • filename <строка> | <Буфер> | <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 не является 100% совместимым на всех платформах и недоступен в некоторых ситуациях.

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

Доступность

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

  • В системах 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, но этот метод медленнее и менее надежен.

Иноды

В системах Linux и macOS fs.watch() разрешает путь к иноду и отслеживает инод. Если отслеживаемый путь удален и создан заново, ему присваивается новый инод. Наблюдение генерирует событие для удаления, но продолжает отслеживать исходный инод. События для нового инода не генерируются. Это ожидаемое поведение.

Файлы AIX сохраняют тот же инод на протяжении всего жизненного цикла файла. Сохранение и закрытие отслеживаемого файла в 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');
  }
}); copy

fs.watchFile(filename[, options], listener)

История
Версия Изменения
v10.5.0

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

v7.6.0

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

v0.1.31

Добавлен в: v0.1.31

  • filename <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <логическое> По умолчанию: false
    • persistent <логическое> По умолчанию: true
    • interval <целое> По умолчанию: 5007
  • listener <Функция>
    • 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}`);
}); copy

Эти объекты stat — это экземпляры fs.Stat. Если параметр bigint имеет значение true, числовые значения в этих объектах заданы как BigInt.

Чтобы получать уведомления о модификации файла, а не только об доступе, необходимо сравнить curr.mtimeMs и prev.mtimeMs.

Когда операция fs.watchFile приводит к ошибке ENOENT, она вызовет обработчик один раз, со всеми полями, сброшенными до нуля (или, для дат, до эпохи Unix). Если файл будет создан позже, обработчик будет вызван снова с последними объектами stat. Это изменение функциональности с версии v0.10.

Использование fs.watch() более эффективно, чем fs.watchFile и fs.unwatchFile. fs.watch следует использовать вместо fs.watchFile и fs.unwatchFile, когда это возможно.

Когда файл, отслеживаемый fs.watchFile(), исчезает и появляется вновь, содержимое previous во втором событии вызова обработчика (появление файла) будет таким же, как содержимое previous в первом событии вызова обработчика (его исчезновение).

Это происходит, когда:

  • файл удален, а затем восстановлен
  • файл переименован, а затем переименован обратно в исходное имя

fs.write(fd, buffer, offset[, length[, position]], callback)

История
Версия Изменения
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.

v0.0.2

Добавлена в: v0.0.2

  • fd <целое число>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <целое число> По умолчанию: 0
  • length <целое число> По умолчанию: buffer.byteLength - offset
  • position <целое число> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • 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 <целое число>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Объект>
    • offset <целое число> По умолчанию: 0
    • length <целое число> По умолчанию: buffer.byteLength - offset
    • position <целое число> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • buffer <Buffer> | <TypedArray> | <DataView>

Записать buffer в файл, указанный в fd.

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

fs.write(fd, string[, position[, encoding]], callback)

История
Версия Изменения
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.

v0.11.5

Добавлена в: v0.11.5

  • fd <целое число>
  • string <строка>
  • position <целое число> | <null> По умолчанию: null
  • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • written <целое число>
    • 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)

История
Версия Изменения
v20.10.0

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

v19.0.0

Передача в параметр string объекта с собственной функцией toString больше не поддерживается.

v18.0.0

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

v0.1.29

Добавлен в: v0.1.29

  • file <строка> | <Буфер> | <URL> | <целое число> имя файла или дескриптор файла
  • data <строка> | <Буфер> | <TypedArray> | <DataView>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое число> По умолчанию: 0o666
    • flag <строка> См. поддержку файловой системы flags. По умолчанию: 'w'.
    • flush <логическое значение> Если все данные успешно записаны в файл, и flush равно true, fs.fsync() используется для сброса данных. По умолчанию: false.
    • signal <AbortSignal> позволяет прервать запрос writeFile
  • callback <Функция>
    • err <Ошибка> | <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!');
}); copy

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

import { writeFile } from 'node:fs';

writeFile('message.txt', 'Hello Node.js', 'utf8', callback); copy

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

Аналогично fs.readFile - fs.writeFile - это удобный метод, который выполняет несколько вызовов write внутри для записи переданного ему буфера. Для производительных кодов следует использовать fs.createWriteStream().

Можно использовать <AbortSignal> для отмены fs.writeFile(). Отмена выполняется с наилучшими усилиями, и, вероятно, некоторое количество данных всё ещё будет записано.

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(); copy

Отмена текущего запроса не отменяет отдельные запросы операционной системы, а скорее внутреннюю буферизацию, которую выполняет 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); copy

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

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

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

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

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

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

v12.9.0

Добавлен в: v12.9.0

  • fd <целое число>
  • buffers <ArrayBufferView[]>
  • position <целое число> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • 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])

История
Версия Изменения
v7.6.0

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

v0.11.15

Добавлен в: v0.11.15

  • path <строка> | <Buffer> | <URL>
  • mode <целое> По умолчанию: 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!');
} copy

fs.appendFileSync(path, data[, options])

История
Версия Изменения
v20.10.0

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

v7.0.0

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

v5.0.0

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

v0.6.7

Добавлен в: v0.6.7

  • path <строка> | <Buffer> | <URL> | <число> имя файла или дескриптор файла
  • data <строка> | <Buffer>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> Смотрите поддержку флагов файловой системы flags. По умолчанию: 'a'.
    • flush <булево> Если 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 */
} copy

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

import { appendFileSync } from 'node:fs';

appendFileSync('message.txt', 'data to append', 'utf8'); copy

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);
} copy

fs.chmodSync(path, mode)

История
Версия Изменения
v7.6.0

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

v0.6.7

Добавлен в: v0.6.7

  • path <строка> | <Buffer> | <URL>
  • mode <строка> | <целое>

Для получения подробной информации см. документацию асинхронной версии этого API: fs.chmod().

См. документацию POSIX chmod(2) для получения дополнительных сведений.

fs.chownSync(path, uid, gid)

История
Версия Изменения
v7.6.0

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

v0.1.97

Добавлен в: v0.1.97

  • path <строка> | <Buffer> | <URL>
  • uid <целое>
  • gid <целое>

Синхронно изменяет владельца и группу файла. Возвращает undefined. Это синхронная версия fs.chown().

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

fs.closeSync(fd)

Добавлен в: v0.1.21
  • fd <целое>

Закрывает дескриптор файла. Возвращает undefined.

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

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

fs.copyFileSync(src, dest[, mode])

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

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

v8.5.0

Добавлен в: v8.5.0

  • src <строка> | <Buffer> | <URL> имя исходного файла для копирования
  • dest <строка> | <Buffer> | <URL> имя целевого файла для копирования
  • mode <целое> модификаторы для операции копирования. По умолчанию: 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: Операция копирования попытается создать ссылку копирования с записью при изменении. Если платформа не поддерживает копирование с записью при изменении, используется резервный механизм копирования.
  • fs.constants.COPYFILE_FICLONE_FORCE: Операция копирования попытается создать ссылку копирования с записью при изменении. Если платформа не поддерживает копирование с записью при изменении, операция завершится ошибкой.
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); copy

fs.cpSync(src, dest[, options])

История
Версия Изменения
v20.1.0

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

v17.6.0, v16.15.0

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

v16.7.0

Добавлен в: v16.7.0

Устойчивость: 1 - Экспериментальная
  • src <строка> | <URL> исходный путь для копирования.
  • dest <строка> | <URL> целевой путь для копирования.
  • options <Объект>
    • dereference <логическое значение> развязывать символические ссылки. По умолчанию: false.
    • errorOnExist <логическое значение> при значении force равном false, и если целевой объект существует, выбросить ошибку. По умолчанию: false.
    • filter <Функция> Функция для фильтрации копируемых файлов/каталогов. Возвращает true для копирования элемента, false для пропуска. При игнорировании каталога все его содержимое также будет пропущено. По умолчанию: undefined
      • src <строка> исходный путь для копирования.
      • dest <строка> целевой путь для копирования.
      • Возвращает: <логическое значение>
    • force <логическое значение> перезаписать существующий файл или каталог. Операция копирования пропустит ошибки, если вы установите это значение в false, а целевой объект существует. Используйте параметр errorOnExist для изменения этого поведения. По умолчанию: true.
    • mode <целое число> модификаторы для операции копирования. По умолчанию: 0. См. флаг mode в fs.copyFileSync().
    • preserveTimestamps <логическое значение> когда true метки времени из src будут сохранены. По умолчанию: false.
    • recursive <логическое значение> рекурсивное копирование каталогов. По умолчанию: false
    • verbatimSymlinks <логическое значение> При значении true разрешение пути для символических ссылок будет пропущено. По умолчанию: false

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

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

fs.existsSync(path)

История
Версия Изменения
v7.6.0

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

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • Возвращает: <логическое значение>

Возвращает 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.'); copy

fs.fchmodSync(fd, mode)

Добавлен в: v0.4.7
  • fd <целое число>
  • mode <строка> | <целое число>

Устанавливает разрешения файла. Возвращает undefined.

Для получения более подробной информации, см. документацию POSIX fchmod(2).

fs.fchownSync(fd, uid, gid)

Добавлен в: v0.4.7
  • fd <целое число>
  • uid <целое число> Новый идентификатор пользователя владельца файла.
  • gid <целое число> Новый идентификатор группы владельца файла.

Устанавливает владельца файла. Возвращает undefined.

Для получения более подробной информации, см. документацию POSIX fchown(2).

fs.fdatasyncSync(fd)

Добавлен в: v0.1.96
  • fd <целое число>

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

fs.fstatSync(fd[, options])

История
Версия Изменения
v10.5.0

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

v0.1.95

Добавлен в: v0.1.95

  • fd <целое число>
  • options <Объект>
    • bigint <логическое значение> указывает, должны ли числовые значения в возвращаемом объекте <fs.Stats> быть bigint. По умолчанию: false.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для дескриптора файла.

См. документацию POSIX fstat(2) для получения подробностей.

fs.fsyncSync(fd)

Добавлен в: v0.1.96
  • fd <целое число>

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

fs.ftruncateSync(fd[, len])

Добавлен в: v0.8.6
  • fd <целое число>
  • len <целое число> По умолчанию: 0

Обрезает дескриптор файла. Возвращает undefined.

Подробности см. в документации асинхронной версии API: fs.ftruncate().

fs.futimesSync(fd, atime, mtime)

История
Версия Изменения
v4.1.0

Теперь разрешены временные спецификаторы для числовых строк, NaN и Infinity.

v0.4.2

Добавлена в: v0.4.2

  • fd <целое>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

Синхронная версия fs.futimes(). Возвращает undefined.

fs.lchmodSync(path, mode)

Устарело с версии: v0.4.7
  • path <строка> | <Буфер> | <URL>
  • mode <целое>

Изменяет разрешения на символическую ссылку. Возвращает undefined.

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

См. документацию POSIX lchmod(2) для получения более подробной информации.

fs.lchownSync(path, uid, gid)

История
Версия Изменения
v10.6.0

Данный API больше не устарел.

v0.4.7

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

  • path <строка> | <Буфер> | <URL>
  • uid <целое> Идентификатор пользователя нового владельца файла.
  • gid <целое> Идентификатор группы новой группы файла.

Устанавливает владельца пути. Возвращает undefined.

См. документацию POSIX lchown(2) для получения более подробной информации.

fs.lutimesSync(path, atime, mtime)

Добавлена в: v14.5.0, v12.19.0
  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

Изменяет временные метки системы файлов символической ссылки, на которую ссылается path. Возвращает undefined или выбрасывает исключение при некорректных параметрах или неудачном выполнении операции. Это синхронная версия fs.lutimes().

fs.linkSync(existingPath, newPath)

История
Версия Изменения
v7.6.0

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

v0.1.31

Добавлена в: v0.1.31

  • existingPath <строка> | <Буфер> | <URL>
  • newPath <строка> | <Буфер> | <URL>

Создает новую ссылку от existingPath к newPath. См. документацию POSIX link(2) для получения более подробной информации. Возвращает undefined.

fs.lstatSync(path[, options])

История
Версия Изменения
v15.3.0, v14.17.0

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

v10.5.0

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

v7.6.0

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

v0.1.30

Добавлена в: v0.1.30

  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <булево> Нужно ли, чтобы числовые значения в возвращаемом объекте <fs.Stats> были bigint. По умолчанию: false.
    • throwIfNoEntry <булево> Нужно ли, чтобы при отсутствии записи в файловой системе было выбрасывание исключения, а не возвращалось undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для символической ссылки, на которую ссылается path.

См. документацию POSIX lstat(2) для получения более подробной информации.

fs.mkdirSync(path[, options])

История
Версия Изменения
v13.11.0, v12.17.0

В режиме recursive теперь возвращается первый созданный путь.

v10.12.0

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

v7.6.0

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

v0.1.21

Добавлена в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • options <Объект> | <целое>
    • recursive <булево> По умолчанию: false
    • mode <строка> | <целое> Не поддерживается в Windows. По умолчанию: 0o777.
  • Возвращает: <строка> | <неопределено>

Синхронно создает каталог. Возвращает undefined, или, если recursive имеет значение true, первый созданный путь к каталогу. Это синхронная версия fs.mkdir().

См. документацию POSIX mkdir(2) для получения более подробной информации.

fs.mkdtempSync(prefix[, options])

История
Версия Изменения
v20.6.0

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

v16.5.0, v14.18.0

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

v5.10.0

Добавлен в: v5.10.0

  • prefix <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка>

Возвращает созданный путь к каталогу.

Для подробной информации см. документацию асинхронной версии этого API: fs.mkdtemp().

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

fs.opendirSync(path[, options])

История
Версия Изменения
v20.1.0

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

v13.1.0, v12.16.0

Был добавлен параметр bufferSize.

v12.12.0

Добавлен в: v12.12.0

  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • bufferSize <число> Количество записей каталога, кэшируемых при чтении из каталога. Более высокие значения приводят к лучшей производительности, но также и к большему потреблению памяти. По умолчанию: 32
    • recursive <булево> По умолчанию: false
  • Возвращает: <fs.Dir>

Синхронно открывает каталог. См. opendir(3).

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

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

fs.openSync(path[, flags[, mode]])

История
Версия Изменения
v11.1.0

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

v9.9.0

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

v7.6.0

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

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • flags <строка> | <число> По умолчанию: 'r'. См. поддержку флагов файловой системы flags.
  • mode <строка> | <целое> По умолчанию: 0o666
  • Возвращает: <число>

Возвращает целое число, представляющее дескриптор файла.

Для подробной информации см. документацию асинхронной версии этого API: fs.open().

fs.readdirSync(path[, options])

История
Версия Изменения
v20.1.0

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

v10.10.0

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

v7.6.0

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

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <булево> По умолчанию: false
    • recursive <булево> Если true, читает содержимое каталога рекурсивно. В рекурсивном режиме он будет перечислять все файлы, подкаталоги и каталоги. По умолчанию: false.
  • Возвращает: <массив строк> | <массив буферов> | <fs.Dirent[]>

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

См. документацию POSIX readdir(3) для получения более подробной информации.

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

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

fs.readFileSync(path[, options])

История
Версия Изменения
v7.6.0

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

v5.0.0

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

v0.1.8

Добавлен в: v0.1.8

  • 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> copy

fs.readlinkSync(path[, options])

История
Версия Изменения
v7.6.0

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

v0.1.31

Добавлена в: v0.1.31

  • 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])

История
Версия Изменения
v10.10.0

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

v6.0.0

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

v0.1.21

Добавлена в: v0.1.21

  • 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

Добавлена в: v13.13.0, v12.17.0

  • 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])

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

Добавлена поддержка разрешения для каналов/сокет.

v7.6.0

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

v6.4.0

Вызов realpathSync теперь снова работает для различных крайних случаев в Windows.

v6.0.0

Параметр cache был удалён.

v0.1.31

Добавлена в: v0.1.31

  • 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).

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

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

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

fs.renameSync(oldPath, newPath)

История изменений
Версия Изменения
v7.6.0

Параметры oldPath и newPath могут быть объектами WHATWG URL, использующими протокол file:. Поддержка пока что экспериментальная.

v0.1.21

Добавлена в: v0.1.21

  • oldPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>

Переименовывает файл из oldPath в newPath. Возвращает undefined.

См. документацию POSIX rename(2) для получения более подробной информации.

fs.rmdirSync(path[, options])

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

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

v16.0.0

Использование fs.rmdirSync(path, { recursive: true }) на несуществующем каталоге больше недопустимо и приводит к ошибке 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:.

v0.1.21

Добавлена в: v0.1.21

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

Синхронная функция rmdir(2). Возвращает undefined.

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

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

fs.rmSync(path[, options])

История изменений
Версия Изменения
v17.3.0, v16.14.0

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

v14.14.0

Добавлена в: 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.

Синхронно удаляет файлы и каталоги (моделируется по стандартной утилите POSIX rm). Возвращает undefined.

fs.statSync(path[, options])

История
Версия Изменения
v15.3.0, v14.17.0

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

v10.5.0

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

v7.6.0

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

v0.1.21

Добавлен в: v0.1.21

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

Возвращает объект <fs.Stats> для заданного пути.

fs.statfsSync(path[, options])

Добавлен в: v19.6.0, v18.15.0
  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <логическое> Указывает, должны ли числовые значения в возвращаемом объекте <fs.StatFs> быть bigint. По умолчанию: false.
  • Возвращает: <fs.StatFs>

Синхронный вызов statfs(2). Возвращает информацию о смонтированной файловой системе, содержащей path.

В случае ошибки, err.code будет одним из Общих системных ошибок.

fs.symlinkSync(target, path[, type])

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

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

v7.6.0

Параметры target и path могут быть объектами WHATWG URL, использующими протокол file:. Поддержка в настоящее время всё ещё экспериментальная.

v0.1.31

Добавлен в: v0.1.31

  • target <строка> | <Буфер> | <URL>
  • path <строка> | <Буфер> | <URL>
  • type <строка> | <null> По умолчанию: null

Возвращает undefined.

Для подробной информации см. документацию асинхронной версии этого API: fs.symlink().

fs.truncateSync(path[, len])

Добавлен в: v0.8.6
  • path <строка> | <Буфер> | <URL>
  • len <целое> По умолчанию: 0

Усекает файл. Возвращает undefined. В качестве первого аргумента также можно передать дескриптор файла. В этом случае, вызывается fs.ftruncateSync().

Передача дескриптора файла устарела и в будущем может привести к ошибке.

fs.unlinkSync(path)

История
Версия Изменения
v7.6.0

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

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>

Синхронный вызов unlink(2). Возвращает undefined.

fs.utimesSync(path, atime, mtime)

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

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

v7.6.0

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

v4.1.0

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

v0.4.2

Добавлен в: v0.4.2

  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

Возвращает undefined.

Для подробной информации см. документацию асинхронной версии этого API: fs.utimes().

fs.writeFileSync(file, data[, options])

История
Версия Изменения
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 можно передавать дескриптор файла.

v0.1.29

Добавлен в: v0.1.29

  • file <строка> | <Буфер> | <URL> | <целое число> имя файла или дескриптор файла
  • data <строка> | <Буфер> | <TypedArray> | <DataView>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое число> По умолчанию: 0o666
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'w'.
    • flush <логическое значение> Если все данные успешно записаны в файл, и flush имеет значение true, то fs.fsyncSync() используется для сброса данных.

Возвращает undefined.

Опция mode влияет только на вновь созданный файл. См. fs.open() для получения дополнительных сведений.

Для получения подробной информации см. документацию асинхронной версии данного API: fs.writeFile().

fs.writeSync(fd, buffer, offset[, length[, position]])

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

Параметр buffer больше не будет приводить к преобразованию неподдерживаемого ввода в строки.

v10.10.0

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

v7.4.0

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

v7.2.0

Параметры offset и length теперь являются необязательными.

v0.1.21

Добавлен в: v0.1.21

  • fd <целое число>
  • buffer <Буфер> | <TypedArray> | <DataView>
  • offset <целое число> По умолчанию: 0
  • length <целое число> По умолчанию: buffer.byteLength - offset
  • position <целое число> | <null> По умолчанию: null
  • Возвращает: <число> Количество записанных байтов.

Для получения подробной информации см. документацию асинхронной версии данного API: fs.write(fd, buffer...).

fs.writeSync(fd, buffer[, options])

Добавлен в: v18.3.0, v16.17.0
  • fd <целое число>
  • buffer <Буфер> | <TypedArray> | <DataView>
  • options <Объект>
    • offset <целое число> По умолчанию: 0
    • length <целое число> По умолчанию: buffer.byteLength - offset
    • position <целое число> По умолчанию: null
  • Возвращает: <число> Количество записанных байтов.

Для получения подробной информации см. документацию асинхронной версии данного API: fs.write(fd, buffer...).

fs.writeSync(fd, string[, position[, encoding]])

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

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

v7.2.0

Параметр position теперь является необязательным.

v0.11.5

Добавлен в: v0.11.5

  • fd <целое число>
  • string <строка>
  • position <целое число> | <null> По умолчанию: null
  • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <число> Количество записанных байтов.

Для получения подробной информации см. документацию асинхронной версии данного API: fs.write(fd, string...).

fs.writevSync(fd, buffers[, position])

Добавлен в: v12.9.0
  • fd <целое число>
  • buffers <ArrayBufferView[]>
  • position <целое число> | <null> По умолчанию: null
  • Возвращает: <число> Количество записанных байтов.

Для получения подробной информации см. документацию асинхронной версии данного 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);
} copy

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

dir.close()
Добавлен в: v12.12.0
  • Возвращает: <Promise>

Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтение приведут к ошибкам.

Возвращается обещание, которое будет выполнено после закрытия ресурса.

dir.close(callback)
История
Версия Изменения
v18.0.0

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

v12.12.0

Добавлен в: v12.12.0

  • callback <Функция>
    • err <Ошибка>

Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтение приведут к ошибкам.

callback будет вызван после закрытия дескриптора ресурса.

dir.closeSync()
Добавлен в: v12.12.0

Синхронно закрывает базовый дескриптор ресурса каталога. Последующие чтение приведут к ошибкам.

dir.path
Добавлен в: v12.12.0
  • <строка>

Только для чтения путь к этому каталогу, который был передан в 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 <Функция>
    • err <Ошибка>
    • 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> для примера.

Записи каталога, возвращаемые этим итератором, не упорядочены в определённом порядке, как предоставляет базовая система каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут отсутствовать в результатах итерации.

Класс: fs.Dirent

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

Представление записи каталога, которая может быть файлом или подкаталогом в каталоге, возвращаемой при чтении из <fs.Dir>. Запись каталога — это комбинация пар имени файла и типа файла.

Кроме того, при вызове fs.readdir() или fs.readdirSync() с параметром withFileTypes, установленным в значение true, результирующий массив заполняется объектами <fs.Dirent>, а не строками или объектами <Buffer>.

dirent.isBlockDevice()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает устройство блочного ввода-вывода.

dirent.isCharacterDevice()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает устройство символьного ввода-вывода.

dirent.isDirectory()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает каталог файловой системы.

dirent.isFIFO()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает пайп (FIFO).

dirent.isFile()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает обычный файл.

dirent.isSocket()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает сокет.

dirent.isSymbolicLink()
Добавлен в: v10.10.0
  • Возвращает: <логическое значение>

Возвращает true, если объект <fs.Dirent> описывает символическую ссылку.

dirent.name
Добавлен в: v10.10.0
  • <string> | <Buffer>

Имя файла, на который ссылается этот объект <fs.Dirent>. Тип этого значения определяется значением options.encoding, переданным в fs.readdir() или fs.readdirSync().

dirent.parentPath
Добавлена в: v20.12.0
Устойчивость: 1 – Экспериментальная
  • <string>

Путь к родительскому каталогу файла, на который ссылается этот объект <fs.Dirent>.

dirent.path
Добавлена в: v20.1.0, v18.17.0Устарела начиная с: v20.12.0
Устойчивость: 0 - Устаревшая: Используйте dirent.parentPath вместо этого.
  • <string>

Псевдоним для dirent.parentPath.

Класс: 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 ...>
  }
}); copy
Событие: '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> "ссылочные", поэтому обычно нет необходимости вызывать 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> "ссылочные", поэтому обычно нет необходимости вызывать 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

История
Версия Изменения
v20.13.0

Публичный конструктор устарел.

v8.1.0

Добавлено время как числа.

v0.1.21

Добавлена в: v0.1.21

Объект <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,
  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 } copy

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,
  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 } copy
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 передаётся в метод, генерирующий объект, свойства будут bigints, в противном случае — числа.

Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs — bigints, содержащие соответствующие временные метки в наносекундах. Они присутствуют только при передаче bigint: true в метод, генерирующий объект. Их точность зависит от платформы.

atime, mtime, ctime, и birthtime — Date объектные альтернативные представления различных временных меток. Значения Date и числовые значения не связаны. Присвоение нового числового значения или изменение значения Date не будет отражено в соответствующем альтернативном представлении.

Временные метки в объекте stat имеют следующий смысл:

  • atime "Время доступа": Время последнего доступа к данным файла. Изменяется вызовами системных функций mknod(2), utimes(2) и read(2).
  • mtime "Время изменения": Время последнего изменения данных файла. Изменяется вызовами системных функций mknod(2), utimes(2) и write(2).
  • ctime "Время изменения статуса": Время последнего изменения статуса файла (изменения данных индексного узла). Изменяется вызовами системных функций 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, также устанавливается, если atime явно задан значением, предшествующим текущему значению birthtime, используя системную функцию utimes(2).

До Node.js 0.12 свойство ctime содержало birthtime на системах Windows. Начиная с 0.12, ctime не является "временем создания", и на Unix-системах таковым никогда не являлось.

Класс: fs.StatFs

Добавлен в: v19.6.0, v18.15.0

Предоставляет информацию о смонтированной файловой системе.

Объекты, возвращаемые функцией fs.statfs() и её синхронным аналогом, являются этого типа. Если bigint в options, переданной в эти методы, равно true, числовые значения будут bigint вместо number.

StatFs {
  type: 1397114950,
  bsize: 4096,
  blocks: 121938943,
  bfree: 61058895,
  bavail: 61058895,
  files: 999,
  ffree: 1000000
} copy

bigint версия:

StatFs {
  type: 1397114950n,
  bsize: 4096n,
  blocks: 121938943n,
  bfree: 61058895n,
  bavail: 61058895n,
  files: 999n,
  ffree: 1000000n
} copy
statfs.bavail
Добавлен в: v19.6.0, v18.15.0
  • <number> | <bigint>

Свободные блоки, доступные непривилегированным пользователям.

statfs.bfree
Добавлен в: v19.6.0, v18.15.0
  • <number> | <bigint>

Свободные блоки в файловой системе.

statfs.blocks
Добавлен в: v19.6.0, v18.15.0
  • <number> | <bigint>

Общее количество блоков данных в файловой системе.

statfs.bsize
Добавлен в: v19.6.0, v18.15.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>

Тип файловой системы.

Класс: 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])
Added in: v0.9.4
  • callback <Функция>
    • err <Ошибка>

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

writeStream.path
Added in: v0.1.93

Путь к файлу, в который записывает поток, как указано в первом аргументе для fs.createWriteStream(). Если path передаётся как строка, то writeStream.path будет строкой. Если path передаётся как <Буфер>, то writeStream.path будет <Буфером>.

writeStream.pending
Added in: v11.2.0
  • <булево значение>

Это свойство равно true, если базовый файл ещё не открыт, т.е. до того, как событие 'ready' не было излучено.

fs.constants

  • <Объект>

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

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) => {
  // ...
}); copy
Константы доступа к файлам

Следующие константы предназначены для использования в качестве параметра 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.

END_OF_DOCUMENT_MARKER

Примечания

Порядок выполнения операций обратного вызова и основанных на обещаниях

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

Например, следующее подвержено ошибкам, так как операция 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)}`);
}); copy

Важно правильно упорядочить операции, ожидая результатов одной перед вызовом другой:

Модули MJS

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

Модули CJS

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():

Модули MJS

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)}`);
  });
});

Модули CJS

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();
} copy

Пример использования относительного пути на 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();
} copy
Пути URL-файлов
Добавлена в: v7.6.0

Для большинства функций модуля node:fs аргумент path или filename может быть передан в виде объекта <URL> с использованием протокола file:.

import { readFileSync } from 'node:fs';

readFileSync(new URL('file:///tmp/hello')); copy

file: URL всегда являются абсолютными путями.

Платформенно-специфические соображения

В Windows, file: <URL> с именем хоста преобразуются в UNC-пути, а file: <URL> с буквами диска — в абсолютные локальные пути. file: <URL> без имени хоста и буквы диска приведут к ошибке:

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 copy

file: <URL> с буквами диска должны использовать : в качестве разделителя сразу после буквы диска. Использование другого разделителя приведет к ошибке.

На всех других платформах file: <URL> с именем хоста не поддерживаются и приведут к ошибке:

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')); copy

file: <URL> с закодированными слешами приведет к ошибке на всех платформах:

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 */ copy

В Windows, file: <URL> с закодированными обратными слешами приведут к ошибке:

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 */ copy
Пути буферов

Пути, указанные с помощью <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();
} copy
Рабочие каталоги по дискам в 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;
  }
}); copy

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();
} copy

Использование пула потоков

Все 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>
}); copy

В 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/dist/latest-v20.x/docs/api/fs.html

Spec-Zone.ru

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