Spec-Zone.ru › Node.js 22 LTS

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

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

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

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

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

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

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

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

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

Пример использования промиса

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

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

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

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

Пример с обратным вызовом

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

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

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

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

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

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

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

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

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

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

API промисов

История
Версия Изменения
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])
История
Версия Изменения
v21.1.0, 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'
    • signal <AbortSignal> | <undefined> позволяет прервать выполняющуюся операцию writeFile. По умолчанию: undefined
  • Возвращает: <Promise> При успешном выполнении разрешается значением undefined.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v16.11.0

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

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

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

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

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

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

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

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

filehandle.fd
Добавлено в: v10.0.0
  • Тип: <number> Числовой файловый дескриптор, управляемый объектом <FileHandle>.
filehandle.read(buffer, offset, length, position)
История
Версия Изменения
v21.0.0

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

v10.0.0

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

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

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

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

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

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

v13.11.0, v12.17.0

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

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

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

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

filehandle.read(buffer[, options])
История
Версия Изменения
v21.0.0

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

v18.2.0, v16.17.0

Добавлено в: v18.2.0, v16.17.0

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

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

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

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

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

v22.17.0

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

v22.15.0

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

v20.0.0, v18.17.0

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

v17.0.0

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

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

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

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

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

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

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

await file.close();
CommonJS
const {
  open,
} = require('node:fs/promises');

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

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

  await file.close();
})();

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

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

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

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

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

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

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

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

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

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

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

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

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

Читает данные из файла и записывает их в массив <ArrayBufferView>

filehandle.stat([options])
История
Версия Изменения
v10.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 <integer> По умолчанию: 0
  • Возвращает: <Promise> При успешном выполнении возвращает undefined.

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

filehandle.writeFile(data, options)
История
Версия Изменения
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> Ожидаемая кодировка символов, если data является строкой. По умолчанию: 'utf8'
    • signal <AbortSignal> | <undefined> позволяет прервать выполняющуюся операцию writeFile. По умолчанию: undefined
  • Возвращает: <Promise>

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

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

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

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

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

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

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

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

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

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

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

filehandle[Symbol.asyncDispose]()
Добавлено в версии: v20.4.0, v18.18.0
Стабильность: 1 — Экспериментальная возможность

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

fsPromises.access(path[, mode])

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

fsPromises.chmod(path, mode)

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

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

fsPromises.chown(path, uid, gid)

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

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

История
Версия Изменения
v22.3.0

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

v20.1.0, v18.17.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

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

fsPromises.glob(pattern[, options])

История
Версия Изменения
v22.17.0

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

v22.17.0

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

v22.14.0

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

v22.2.0

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

v22.0.0

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

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

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

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

fsPromises.lchmod(path, mode)

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

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

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

fsPromises.lchown(path, uid, gid)

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

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

v10.0.0

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

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

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

fsPromises.lutimes(path, atime, mtime)

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

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

fsPromises.link(existingPath, newPath)

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

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

fsPromises.lstat(path[, options])

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

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

v10.0.0

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

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

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

fsPromises.mkdir(path[, options])

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

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

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

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

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

  console.log(`created ${createDir}`);
} catch (err) {
  console.error(err.message);
}
CommonJS
const { mkdir } = require('node:fs/promises');
const { join } = require('node:path');

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

  console.log(dirCreation);
  return dirCreation;
}

makeDirectory().catch(console.error);

fsPromises.mkdtemp(prefix[, options])

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

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

v16.5.0, v14.18.0

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

v10.0.0

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

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

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

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

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

try {
  await mkdtemp(join(tmpdir(), 'foo-'));
} catch (err) {
  console.error(err);
} 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 <string> | <Buffer> | <URL>
  • flags <string> | <number> См. раздел поддержка флагов файловой системы flags. По умолчанию: 'r'.
  • mode <string> | <integer> Устанавливает режим файла (права доступа и sticky-биты), если файл создается. По умолчанию: 0o666 (чтение и запись)
  • Возвращает: <Promise> Выполняется с объектом <FileHandle>.

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

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

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

fsPromises.opendir(path[, options])

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

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

v13.1.0, v12.16.0

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

v12.12.0

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

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

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

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

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

Пример асинхронной итерации:

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

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

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

fsPromises.readdir(path[, options])

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

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

v10.11.0

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

v10.0.0

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

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

Считывает содержимое каталога.

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

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

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

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

fsPromises.readFile(path[, options])

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

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

v10.0.0

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

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

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

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

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

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

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

Модули JavaScript
import { readFile } from 'node:fs/promises';
try {
  const filePath = new URL('./package.json', import.meta.url);
  const contents = await readFile(filePath, { encoding: 'utf8' });
  console.log(contents);
} catch (err) {
  console.error(err.message);
}
CommonJS
const { readFile } = require('node:fs/promises');
const { resolve } = require('node:path');
async function logFile() {
  try {
    const filePath = resolve('./package.json');
    const contents = await readFile(filePath, { encoding: 'utf8' });
    console.log(contents);
  } catch (err) {
    console.error(err.message);
  }
}
logFile();

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

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

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

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

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

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

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

fsPromises.readlink(path[, options])

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

Считывает содержимое символической ссылки, на которую указывает path. Дополнительные сведения см. в документации POSIX readlink(2). В случае успеха промис выполняется с linkString.

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

fsPromises.realpath(path[, options])

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

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

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

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

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

fsPromises.rename(oldPath, newPath)

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

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

fsPromises.rmdir(path[, options])

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

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

fsPromises.stat(path[, options])

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

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

v10.0.0

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

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

fsPromises.statfs(path[, options])

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

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

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

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

v10.0.0

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

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <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 <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0
  • Возвращает: <Promise> При успешном выполнении разрешается значением undefined.

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

fsPromises.unlink(path)

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

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

fsPromises.utimes(path, atime, mtime)

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

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

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

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

fsPromises.watch(filename[, options])

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

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

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

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

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

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

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

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

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

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

v15.14.0, v14.18.0

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

v15.2.0, v14.17.0

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

v14.0.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fsPromises.constants

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

Возвращает объект, содержащий часто используемые константы для операций с файловой системой. Этот объект совпадает с 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 <string> | <Buffer> | <URL>
  • mode <integer> По умолчанию: fs.constants.F_OK
  • callback <Function>
    • err <Error>

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

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

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

const file = 'package.json';

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

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

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

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

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

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

v18.0.0

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

v10.0.0

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

v7.0.0

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

v7.0.0

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

v5.0.0

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

v0.6.7

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

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

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

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

import { appendFile } from 'node:fs';

appendFile('message.txt', 'data to append', (err) => {
  if (err) throw err;
  console.log('The "data to append" was appended to file!');
}); 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 <string> | <Buffer> | <URL>
  • mode <string> | <integer>
  • callback <Function>
    • err <Error>

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

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

import { chmod } from 'node:fs';

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

Аргумент 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 больше не является необязательным. Если его не передать, во время выполнения будет вызвана ошибка TypeError.

v7.6.0

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

v7.0.0

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

v0.1.97

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

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

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

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

v7.0.0

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

v0.0.2

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

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

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

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

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

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

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

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

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

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

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

История
Версия Изменения
v22.3.0

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

v20.1.0, v18.17.0

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

v18.0.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

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

fs.createReadStream(path[, options])

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

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

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

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

v16.10.0

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

v16.10.0

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

v15.5.0

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

v15.4.0

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

v14.0.0

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

v13.6.0, v12.17.0

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

v12.10.0

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

v7.6.0

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

v7.0.0

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

v5.5.0

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

v2.3.0

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

v0.1.31

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

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

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

Если для 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 <string> | <Buffer> | <URL>
  • callback <Function>
    • exists <boolean>

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

import { exists } from 'node:fs';

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

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

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

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

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

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

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

      try {
        writeMyData(fd);
      } finally {
        close(fd, (err) => {
          if (err) throw err;
        });
      }
    });
  }
}); 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 <integer>
  • mode <string> | <integer>
  • callback <Function>
    • err <Error>

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

Подробнее см. документацию 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 <integer>
  • uid <integer>
  • gid <integer>
  • callback <Function>
    • err <Error>

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

Подробнее см. документацию 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 <integer>
  • callback <Function>
    • err <Error>

Принудительно переводит все поставленные в очередь операции ввода-вывода, связанные с файлом, в состояние завершения синхронного ввода-вывода операционной системы. Подробнее см. в документации 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 <integer>
  • options <Object>
    • bigint <boolean> Указывает, должны ли числовые значения в возвращённом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
  • callback <Function>
    • err <Error>
    • stats <fs.Stats>

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

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

fs.fsync(fd, callback)

История
Версия Изменения
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 <integer>
  • callback <Function>
    • err <Error>

Запрашивает сброс всех данных открытого файлового дескриптора на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Подробнее см. в документации 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 <integer>
  • len <integer> По умолчанию: 0
  • callback <Function>
    • err <Error>

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

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

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

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

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

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

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

  try {
    ftruncate(fd, 4, (err) => {
      closeFd(fd);
      if (err) throw err;
    });
  } catch (err) {
    closeFd(fd);
    if (err) throw err;
  }
}); 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 <integer>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • callback <Function>
    • err <Error>

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

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

История
Версия Изменения
v22.17.0

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

v22.17.0

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

v22.14.0

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

v22.2.0

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

v22.0.0

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

  • pattern <string> | <string[]>

  • options <Object>

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

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

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

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

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

fs.lchmod(path, mode, callback)

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

Стабильность: 0 — Устарело
  • path <string> | <Buffer> | <URL>
  • mode <integer>
  • callback <Function>
    • err <Error> | <AggregateError>

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

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

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

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

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

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

v10.6.0

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

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

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

v14.5.0, v12.19.0

Добавлено в версиях: v14.5.0, v12.19.0

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

Изменяет время доступа и модификации файла так же, как 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 <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>
  • callback <Function>
    • err <Error>

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

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

Подробнее см. в документации 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 <string> | <Buffer> | <URL>
  • options <Object> | <integer>
    • recursive <boolean> По умолчанию: false
    • mode <string> | <integer> Не поддерживается в Windows. По умолчанию: 0o777.
  • callback <Function>
    • err <Error>
    • path <string> | <undefined> Присутствует, только если каталог создан с параметром 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, v18.19.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 <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • directory <string>

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

Генерирует шесть случайных символов, которые добавляются к обязательному параметру 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 и нужно создать временный каталог внутри /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 <string> | <Buffer> | <URL>
  • flags <string> | <number> См. раздел о поддержке флагов файловой системы flags. По умолчанию: 'r'.
  • mode <string> | <integer> По умолчанию: 0o666 (чтение и запись)
  • callback <Function>
    • err <Error>
    • fd <integer>

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

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

Функция обратного вызова получает два аргумента (err, fd).

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

Такое же поведение характерно и для функций, основанных на fs.open(): fs.writeFile(), fs.readFile() и т. д.

fs.openAsBlob(path[, options])

История
Версия Изменения
v22.17.0

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

v19.8.0

Добавлено в: v19.8.0

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

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

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

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

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

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

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

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

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

v18.0.0

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

v13.1.0, v12.16.0

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

v12.12.0

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

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

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

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

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

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

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

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

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

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

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

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

Например:

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

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

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

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

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

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

v13.11.0, v12.17.0

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

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

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

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

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

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

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

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

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

v18.0.0

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

v10.10.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v6.0.0

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

v0.1.8

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

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

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

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

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

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

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

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

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

v16.0.0

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

v15.2.0, v14.17.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v5.1.0

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

v5.0.0

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

v0.1.29

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

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

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

import { readFile } from 'node:fs';

readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
}); 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 <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • linkString <string> | <Buffer>

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

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

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

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

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

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

v13.13.0, v12.17.0

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

  • fd <integer>
  • buffers <ArrayBufferView[]>
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffers <ArrayBufferView[]>

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

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

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

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

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

История
Версия Изменения
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 <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • resolvedPath <string> | <Buffer>

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

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

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

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

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

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

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

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

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

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

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

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

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

v9.2.0

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

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

Асинхронный вариант realpath(3).

В callback передаются два аргумента: (err, resolvedPath).

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

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

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

fs.rename(oldPath, newPath, callback)

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

v0.0.2

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

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

Асинхронно переименовывает файл по пути 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 }) для path, являющегося файлом, больше не допускается и приводит к ошибке ENOENT в Windows и ошибке ENOTDIR в POSIX.

v16.0.0

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

v16.0.0

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

v14.14.0

Параметр recursive устарел, используйте вместо него fs.rm.

v13.3.0, v12.16.0

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

v12.10.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

  • 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.
  • callback <Function>
    • err <Error>

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

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

Чтобы получить поведение, аналогичное команде Unix rm -rf, используйте 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 больше не является необязательным. Если его не передать, будет выдано предупреждение об устаревании с идентификатором 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' аргумент 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 <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0
  • callback <Function>
    • err <Error> | <AggregateError>

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

Модули JavaScript
import { truncate } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was truncated');
});
CommonJS
const { truncate } = require('node:fs');
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was truncated');
});

Передача файлового дескриптора считается устаревшей и в будущем может привести к ошибке.

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

fs.unlink(path, callback)

История
Версия Изменения
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 <string> | <Buffer> | <URL>
  • callback <Function>
    • err <Error>

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

import { unlink } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
unlink('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was deleted');
}); copy

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

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

fs.unwatchFile(filename[, listener])

Добавлено в: v0.1.31
  • filename <string> | <Buffer> | <URL>
  • listener <Function> Необязательный параметр — ранее добавленный прослушиватель с помощью fs.watchFile()

Прекращает отслеживание изменений в filename. Если указан listener, удаляется только этот прослушиватель. В противном случае удаляются все прослушиватели, и отслеживание filename прекращается.

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

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

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

История
Версия Изменения
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 <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • callback <Function>
    • err <Error>

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

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

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

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

История
Версия Изменения
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 <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • persistent <boolean> Указывает, должен ли процесс продолжать работу, пока ведётся наблюдение за файлами. По умолчанию: true.
    • recursive <boolean> Указывает, следует ли наблюдать за всеми вложенными каталогами или только за текущим каталогом. Применяется, если указан каталог, и только на поддерживаемых платформах (см. ограничения). По умолчанию: false.
    • encoding <string> Указывает кодировку символов, используемую для имени файла, передаваемого обработчику. По умолчанию: 'utf8'.
    • signal <AbortSignal> позволяет закрыть наблюдатель с помощью AbortSignal.
  • listener <Function> | <undefined> По умолчанию: undefined
    • eventType <string>
    • filename <string> | <Buffer> | <null>
  • Возвращает: <fs.FSWatcher>

Наблюдает за изменениями в filename, где filename — это файл или каталог.

Второй аргумент необязателен. Если options передан в виде строки, он задаёт encoding. В противном случае options следует передать в виде объекта.

Функция обратного вызова обработчика получает два аргумента (eventType, filename). eventType — это либо 'rename', либо 'change', а filename — имя файла, вызвавшего событие.

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

Функция обратного вызова обработчика привязана к событию 'change', генерируемому объектом <fs.FSWatcher>, однако это не то же самое, что значение 'change' объекта eventType.

Если передан signal, прерывание соответствующего AbortController закроет возвращённый объект <fs.FSWatcher>.

Ограничения

API fs.watch работает неодинаково на разных платформах и недоступен в некоторых ситуациях.

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

API fs.watch не обеспечивает защиту от вредоносных действий в файловой системе. Например, в Windows его работа основана на отслеживании изменений в каталоге, а не в конкретных файлах. Это позволяет подменить файл, после чего fs будет сообщать об изменениях в новом файле с тем же именем.

Доступность

Работа этой функции зависит от наличия в операционной системе механизма оповещения об изменениях файловой системы.

  • В системах Linux используется inotify(7).
  • В системах BSD используется kqueue(2).
  • В macOS для файлов используется kqueue(2), а для каталогов — FSEvents.
  • В системах SunOS (включая Solaris и SmartOS) используется event ports.
  • В системах Windows работа этой функции зависит от ReadDirectoryChangesW.
  • В системах AIX работа этой функции зависит от AHAFS, который должен быть включён.
  • В системах IBM i эта функция не поддерживается.

Если по какой-либо причине базовая функциональность недоступна, fs.watch() не сможет работать и может вызвать исключение. Например, наблюдение за файлами или каталогами может быть ненадёжным, а в некоторых случаях невозможным, в сетевых файловых системах (NFS, SMB и т. д.) или в файловых системах хоста при использовании программ виртуализации, таких как Vagrant или Docker.

Тем не менее можно использовать fs.watchFile(), который выполняет опрос с помощью stat, однако этот метод медленнее и менее надёжен.

Иноды

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

В AIX файлы сохраняют один и тот же inode на протяжении всего срока существования. Сохранение и закрытие наблюдаемого файла в AIX приведёт к двум уведомлениям: одному о добавлении нового содержимого и одному об усечении файла.

Аргумент имени файла

Передача аргумента filename в обработчик обратного вызова поддерживается только в Linux, macOS, Windows и AIX. Даже на поддерживаемых платформах передача filename не всегда гарантируется. Поэтому не следует считать, что аргумент filename всегда передаётся в обработчик обратного вызова; предусмотрите резервную логику на случай, если он null.

import { watch } from 'node:fs';
watch('somedir', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
}); copy

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

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

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

v7.6.0

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

v0.1.31

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

  • filename <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> По умолчанию: false
    • persistent <boolean> По умолчанию: true
    • interval <integer> По умолчанию: 5007
  • listener <Function>
    • current <fs.Stats>
    • previous <fs.Stats>
  • Возвращает: <fs.StatWatcher>

Наблюдает за изменениями в filename. Функция обратного вызова listener будет вызываться каждый раз при обращении к файлу.

Аргумент options можно опустить. Если он указан, это должен быть объект. Объект options может содержать логическое свойство с именем persistent, указывающее, должен ли процесс продолжать работу, пока ведётся наблюдение за файлами. В объекте options можно указать свойство interval, определяющее интервал опроса целевого объекта в миллисекундах.

Функция обратного вызова listener получает два аргумента: текущий объект stat и предыдущий объект stat:

import { watchFile } from 'node:fs';

watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
}); 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.watchFile и fs.unwatchFile следует использовать fs.watch.

Если файл, за которым ведётся наблюдение с помощью 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 <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer> По умолчанию: 0
  • length <integer> По умолчанию: buffer.byteLength - offset
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffer <Buffer> | <TypedArray> | <DataView>

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

offset определяет часть буфера, которую нужно записать, а length — целое число, указывающее количество байтов для записи.

position указывает смещение от начала файла, куда следует записать эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

Обратному вызову будут переданы три аргумента (err, bytesWritten, buffer), где bytesWritten указывает, сколько байтов было записано из buffer.

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

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

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

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

Добавлено в: v18.3.0, v16.17.0
  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffer <Buffer> | <TypedArray> | <DataView>

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

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

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

История
Версия Изменения
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 <integer>
  • string <string>
  • position <integer> | <null> По умолчанию: null
  • encoding <string> По умолчанию: 'utf8'
  • callback <Function>
    • err <Error>
    • written <integer>
    • string <string>

Записывает string в файл, указанный в fd. Если string не является строкой, возникает исключение.

position указывает смещение от начала файла, куда следует записать эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

encoding — ожидаемая кодировка строки.

Обратному вызову будут переданы аргументы (err, written, string), где written указывает, сколько байтов требуется для записи переданной строки. Количество записанных байтов не обязательно совпадает с количеством записанных символов строки. См. Buffer.byteLength.

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

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

В Windows, если файловый дескриптор подключен к консоли (например, fd == 1 или stdout), строка, содержащая символы не из ASCII, по умолчанию будет отображаться некорректно независимо от используемой кодировки. Консоль можно настроить для корректного отображения UTF-8, изменив активную кодовую страницу командой chcp 65001. Подробнее см. документацию по chcp.

fs.writeFile(file, data[, options], callback)

История
Версия Изменения
v21.0.0, 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 <string> | <Buffer> | <URL> | <integer> имя файла или файловый дескриптор
  • data <string> | <Buffer> | <TypedArray> | <DataView>
  • options <Object> | <string>
    • encoding <string> | <null> По умолчанию: 'utf8'
    • mode <integer> По умолчанию: 0o666
    • flag <string> См. раздел поддержка flags файловой системы. По умолчанию: 'w'.
    • flush <boolean> Если все данные успешно записаны в файл и flush имеет значение true, для сброса данных используется fs.fsync(). По умолчанию: false.
    • signal <AbortSignal> позволяет прервать выполняющуюся операцию writeFile
  • callback <Function>
    • err <Error> | <AggregateError>

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

Если file — файловый дескриптор, поведение аналогично прямому вызову fs.write() (что и рекомендуется). См. примечания ниже об использовании файлового дескриптора.

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

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

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

const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
}); 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().

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

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

const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
  // When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort(); 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 <integer>
  • buffers <ArrayBufferView[]>
  • position <integer> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffers <ArrayBufferView[]>

Записывает массив объектов ArrayBufferView в файл, указанный параметром fd, с помощью writev().

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

Функции обратного вызова будут переданы три аргумента: err, bytesWritten и buffers. bytesWritten — количество байтов, записанных из buffers.

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

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

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

Синхронный API

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

fs.accessSync(path[, mode])

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

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

v0.11.15

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

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

Синхронно проверяет разрешения пользователя для файла или каталога, указанного в path. Аргумент mode — необязательное целое число, задающее проверки доступности, которые необходимо выполнить. Значение mode должно быть либо fs.constants.F_OK, либо маской, состоящей из побитового OR любых значений из 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])

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

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

v7.0.0

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

v5.0.0

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

v0.6.7

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

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

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

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

import { appendFileSync } from 'node:fs';

try {
  appendFileSync('message.txt', 'data to append');
  console.log('The "data to append" was appended to file!');
} catch (err) {
  /* Handle the error */
} 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 <string> | <Buffer> | <URL>
  • mode <string> | <integer>

Подробную информацию см. в документации по асинхронной версии этого 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 <string> | <Buffer> | <URL>
  • uid <integer>
  • gid <integer>

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

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

fs.closeSync(fd)

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

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

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

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

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

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

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

v8.5.0

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

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

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

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

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

// destination.txt will be created or overwritten by default.
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');

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

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

История
Версия Изменения
v22.3.0

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

v20.1.0, v18.17.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

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

fs.existsSync(path)

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

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

v0.1.21

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

  • path <string> | <Buffer> | <URL>
  • Возвращает: <boolean>

Возвращает true, если путь существует, и false в противном случае.

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

fs.exists() устарел, а fs.existsSync() — нет. Параметр callback функции fs.exists() принимает параметры, которые не соответствуют соглашениям других обратных вызовов Node.js. fs.existsSync() не использует обратный вызов.

import { existsSync } from 'node:fs';

if (existsSync('/etc/passwd'))
  console.log('The path exists.'); copy

fs.fchmodSync(fd, mode)

Добавлено в: v0.4.7
  • fd <integer>
  • mode <string> | <integer>

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

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

fs.fchownSync(fd, uid, gid)

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

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

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

fs.fdatasyncSync(fd)

Добавлено в: v0.1.96
  • fd <integer>

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

fs.fstatSync(fd[, options])

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

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

v0.1.95

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

  • fd <integer>
  • options <Object>
    • bigint <boolean> Должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
  • Возвращает: <fs.Stats>

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

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

fs.fsyncSync(fd)

Добавлено в: v0.1.96
  • fd <integer>

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

fs.ftruncateSync(fd[, len])

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

Усекает файл, указанный файловым дескриптором. Возвращает undefined.

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

fs.futimesSync(fd, atime, mtime)

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

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

v0.4.2

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

  • fd <integer>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

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

fs.globSync(pattern[, options])

История
Версия Изменения
v22.17.0

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

v22.17.0

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

v22.14.0

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

v22.2.0

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

v22.0.0

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

  • pattern <string> | <string[]>
  • options <Object>
    • cwd <string> | <URL> текущий рабочий каталог. По умолчанию: process.cwd()
    • exclude <Function> | <string[]> Функция для фильтрации файлов и каталогов или список шаблонов glob, которые необходимо исключить. Если указана функция, верните true, чтобы исключить элемент, и false, чтобы включить его. По умолчанию: undefined.
    • withFileTypes <boolean> true, если glob должен возвращать пути в виде Dirent, и false в противном случае. По умолчанию: false.
  • Возвращает: <string[]> пути к файлам, соответствующим шаблону.
Модули JavaScript
import { globSync } from 'node:fs';

console.log(globSync('**/*.js'));
CommonJS
const { globSync } = require('node:fs');

console.log(globSync('**/*.js'));

fs.lchmodSync(path, mode)

Устарело с: v0.4.7
Стабильность: 0 — Устарело
  • path <string> | <Buffer> | <URL>
  • mode <integer>

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

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

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

fs.lchownSync(path, uid, gid)

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

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

v0.4.7

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

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

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

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

fs.lutimesSync(path, atime, mtime)

Добавлено в: v14.5.0, v12.19.0
  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

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

fs.linkSync(existingPath, newPath)

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

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

v0.1.31

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

  • existingPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <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 <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Указывает, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Указывает, будет ли выброшено исключение, если запись файловой системы не существует, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

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

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

fs.mkdirSync(path[, options])

История
Версия Изменения
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 <string> | <Buffer> | <URL>
  • options <Object> | <integer>
    • recursive <boolean> По умолчанию: false
    • mode <string> | <integer> Не поддерживается в Windows. По умолчанию: 0o777.
  • Возвращает: <string> | <undefined>

Синхронно создаёт каталог. Возвращает undefined или, если recursive имеет значение true, путь к первому созданному каталогу. Это синхронная версия fs.mkdir().

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

fs.mkdtempSync(prefix[, options])

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

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

v16.5.0, v14.18.0

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

v5.10.0

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

  • prefix <string> | <Buffer> | <URL>
  • options <string> | <Object>
    • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <string>

Возвращает путь к созданному каталогу.

Подробные сведения см. в документации по асинхронной версии этого API: fs.mkdtemp().

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

fs.opendirSync(path[, options])

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

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

v13.1.0, v12.16.0

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

v12.12.0

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

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

Синхронно открывает каталог. См. opendir(3).

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

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

fs.openSync(path[, flags[, mode]])

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

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

v9.9.0

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

v7.6.0

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

v0.1.21

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

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

Возвращает целое число, представляющее файловый дескриптор.

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

fs.readdirSync(path[, options])

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

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

v10.10.0

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

v7.6.0

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

v0.1.21

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

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

Считывает содержимое каталога.

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

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

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

fs.readFileSync(path[, options])

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

Можно передать объект параметров, чтобы сделать аргументы offset, length и position необязательными.

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 }) для path, являющегося файлом, больше не допускается и приводит к ошибке ENOENT в Windows и ошибке ENOTDIR в POSIX.

v16.0.0

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

v16.0.0

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

v14.14.0

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

v13.3.0, v12.16.0

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

v12.10.0

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

v7.6.0

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

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.

Чтобы получить поведение, аналогичное команде Unix rm -rf, используйте 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 <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Определяет, должны ли числовые значения в возвращаемом объекте <fs.Stats> иметь тип bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Определяет, будет ли выброшено исключение, если запись файловой системы не существует, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для указанного пути.

fs.statfsSync(path[, options])

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

Синхронный вызов statfs(2). Возвращает сведения о смонтированной файловой системе, содержащей path.

В случае ошибки значение err.code будет одним из распространённых системных ошибок.

fs.symlinkSync(target, path[, type])

История
Версия Изменения
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
  • Возвращает: undefined.

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

fs.truncateSync(path[, len])

Добавлено в: v0.8.6
  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0

Усекает файл. Возвращает undefined. В качестве первого аргумента также можно передать файловый дескриптор. В этом случае вызывается fs.ftruncateSync().

Передача файлового дескриптора считается устаревшей и в будущем может привести к выбросу ошибки.

fs.unlinkSync(path)

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

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

v0.1.21

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

  • path <string> | <Buffer> | <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 <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>
  • Возвращает: undefined.

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

fs.writeFileSync(file, data[, options])

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

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

v19.0.0

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

v17.8.0

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

v14.12.0

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

v14.0.0

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

v10.10.0

Теперь параметр data может иметь тип TypedArray или DataView.

v7.4.0

Теперь параметр data может иметь тип Uint8Array.

v5.0.0

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

v0.1.29

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

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

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

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

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

История
Версия Изменения
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 <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer> По умолчанию: 0
  • length <integer> По умолчанию: buffer.byteLength - offset
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, buffer[, options])

Добавлено в версиях: v18.3.0, v16.17.0
  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, string[, position[, encoding]])

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

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

v7.2.0

Теперь параметр position является необязательным.

v0.11.5

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

  • fd <integer>
  • string <string>
  • position <integer> | <null> По умолчанию: null
  • encoding <string> По умолчанию: 'utf8'
  • Возвращает: <number> Количество записанных байтов.

Подробную информацию см. в документации асинхронной версии этого API: fs.write(fd, string...).

fs.writevSync(fd, buffers[, position])

Добавлено в версии: v12.9.0
  • fd <integer>
  • buffers <ArrayBufferView[]>
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество записанных байтов.

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

Общие объекты

Общие объекты используются всеми вариантами API файловой системы (на основе промисов, обратных вызовов и синхронные).

Класс: fs.Dir

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

Класс, представляющий поток каталога.

Создаётся с помощью fs.opendir(), fs.opendirSync() или fsPromises.opendir().

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

try {
  const dir = await opendir('./');
  for await (const dirent of dir)
    console.log(dirent.name);
} catch (err) {
  console.error(err);
} 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 <Function>
    • err <Error>

Асинхронно закрывает дескриптор базового ресурса каталога. При последующих чтениях будут возникать ошибки.

Обратный вызов callback будет вызван после закрытия дескриптора ресурса.

dir.closeSync()
Добавлено в: v12.12.0

Синхронно закрывает дескриптор базового ресурса каталога. При последующих чтениях будут возникать ошибки.

dir.path
Добавлено в: v12.12.0
  • Тип: <string>

Путь к этому каталогу только для чтения, указанный при вызове fs.opendir(), fs.opendirSync() или fsPromises.opendir().

dir.read()
Добавлено в: v12.12.0
  • Возвращает: <Promise> Выполняется с результатом <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога с помощью readdir(3) как <fs.Dirent>.

Возвращается промис, который будет выполнен с объектом <fs.Dirent> или значением null, если записей каталога для чтения больше нет.

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

dir.read(callback)
Добавлено в: v12.12.0
  • callback <Function>
    • err <Error>
    • dirent <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога с помощью readdir(3) как <fs.Dirent>.

После завершения чтения будет вызван обратный вызов callback с объектом <fs.Dirent> или значением null, если записей каталога для чтения больше нет.

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

dir.readSync()
Добавлено в: v12.12.0
  • Возвращает: <fs.Dirent> | <null>

Синхронно считывает следующую запись каталога как <fs.Dirent>. Дополнительные сведения см. в документации POSIX по readdir(3).

Если записей каталога для чтения больше нет, будет возвращено null.

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

dir[Symbol.asyncIterator]()
Добавлено в: v12.12.0
  • Возвращает: <AsyncIterator> AsyncIterator объектов <fs.Dirent>

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

Записи, возвращаемые асинхронным итератором, всегда являются объектами <fs.Dirent>. Случай null из dir.read() обрабатывается внутри.

Пример см. в разделе <fs.Dir>.

Записи каталога, возвращаемые этим итератором, располагаются в произвольном порядке, определяемом базовыми механизмами каталогов операционной системы. Записи, добавленные или удалённые во время перебора каталога, могут не попасть в результаты итерации.

dir[Symbol.asyncDispose]()
Добавлено в: v22.17.0
Стабильность: 1 — Экспериментальный

Вызывает dir.close(), если дескриптор каталога открыт, и возвращает промис, который выполняется после завершения освобождения ресурса.

dir[Symbol.Dispose]()
Добавлено в: v22.17.0
Стабильность: 1 — Экспериментальный

Вызывает dir.closeSync(), если дескриптор каталога открыт, и возвращает undefined.

Класс: fs.Dirent

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

Представление записи каталога, которой может быть файл или подкаталог внутри каталога, возвращаемое при чтении объекта <fs.Dir>. Запись каталога представляет собой сочетание имени файла и типа файла.

Кроме того, если fs.readdir() или fs.readdirSync() вызывается с параметром withFileTypes, установленным в true, результирующий массив заполняется объектами <fs.Dirent>, а не строками или объектами <Buffer>.

dirent.isBlockDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает блочное устройство.

dirent.isCharacterDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символьное устройство.

dirent.isDirectory()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает каталог файловой системы.

dirent.isFIFO()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает канал FIFO (первым пришёл — первым вышел).

dirent.isFile()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает обычный файл.

dirent.isSocket()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает сокет.

dirent.isSymbolicLink()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символическую ссылку.

dirent.name
Добавлено в: v10.10.0
  • Тип: <string> | <Buffer>

Имя файла, на который ссылается этот объект <fs.Dirent>. Тип этого значения определяется параметром options.encoding, переданным в fs.readdir() или fs.readdirSync().

dirent.parentPath
История
Версия Изменения
v22.17.0

Перевод API в стабильный статус.

v21.4.0, v20.12.0, v18.20.0

Добавлено в: v21.4.0, v20.12.0, v18.20.0

  • Тип: <string>

Путь к родительскому каталогу файла, на который ссылается этот объект <fs.Dirent>.

dirent.path
Добавлено в: v20.1.0, v18.17.0Устарело с версии: v21.5.0, v20.12.0, v18.20.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'.

Class: fs.Stats

История
Версия Изменения
v22.0.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, значения свойств будут bigint, в противном случае — number.

Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs — это bigint, содержащие соответствующее время в наносекундах. Они присутствуют только в том случае, если в метод, создающий объект, передано bigint: true. Точность зависит от платформы.

atime, mtime, ctime и birthtime — это альтернативные представления различных значений времени в виде объектов Date. Значения Date и number не связаны между собой. Присваивание нового числового значения или изменение значения Date не отразится на соответствующем альтернативном представлении.

Значения времени в объекте stat имеют следующую семантику:

  • atime «Время доступа»: время последнего обращения к данным файла. Изменяется системными вызовами mknod(2), utimes(2) и read(2).
  • mtime «Время изменения»: время последнего изменения данных файла. Изменяется системными вызовами mknod(2), utimes(2) и write(2).
  • ctime «Время изменения состояния»: время последнего изменения состояния файла (изменения данных inode). Изменяется системными вызовами chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2), read(2) и write(2).
  • birthtime «Время создания»: время создания файла. Устанавливается один раз при создании файла. В файловых системах, где время создания недоступно, это поле может содержать ctime или 1970-01-01T00:00Z (то есть временную метку эпохи Unix 0). В этом случае это значение может быть больше, чем atime или mtime. В Darwin и других вариантах FreeBSD это значение также устанавливается, если atime явно задано более ранним, чем текущее birthtime, с помощью системного вызова utimes(2).

До Node.js 0.12 в ctime в системах Windows хранилось значение birthtime. Начиная с версии 0.12, ctime не является «временем создания»; в системах Unix это никогда не было так.

Класс: fs.StatFs

Добавлено в: v19.6.0, v18.15.0

Предоставляет информацию о смонтированной файловой системе.

Объекты, возвращаемые функцией fs.statfs() и её синхронным аналогом, имеют этот тип. Если bigint в options, переданном этим методам, — true, числовые значения будут иметь тип bigint, а не number.

StatFs {
  type: 1397114950,
  bsize: 4096,
  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])
Добавлено в: v0.9.4
  • callback <Function>
    • err <Error>

Закрывает writeStream. При необходимости принимает callback, который будет выполнен после закрытия writeStream.

writeStream.path
Добавлено в: v0.1.93

Путь к файлу, в который выполняется запись потока, указанный первым аргументом функции fs.createWriteStream(). Если path передан в виде строки, writeStream.path будет строкой. Если path передан как <Buffer>, writeStream.path будет <Buffer>.

writeStream.pending
Добавлено в: v11.2.0
  • Тип: <boolean>

Это свойство имеет значение true, если базовый файл ещё не открыт, то есть до возникновения события 'ready'.

fs.constants

  • Тип: <Object>

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

Константы FS

Следующие константы экспортируются fs.constants и fsPromises.constants.

Не все константы доступны во всех операционных системах; это особенно важно для Windows, где недоступны многие определения, специфичные для POSIX. Для переносимых приложений рекомендуется проверять наличие констант перед их использованием.

Чтобы использовать несколько констант, применяйте оператор побитового ИЛИ |.

Пример:

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

const {
  O_RDWR,
  O_CREAT,
  O_EXCL,
} = constants;

open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
  // ...
}); 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.

Примечания

Порядок выполнения операций с обратными вызовами и на основе промисов

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

Например, следующий код может привести к ошибке, поскольку операция 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

Важно правильно упорядочивать операции, дожидаясь результатов одной из них перед вызовом другой:

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

const oldPath = '/tmp/hello';
const newPath = '/tmp/world';

try {
  await rename(oldPath, newPath);
  const stats = await stat(newPath);
  console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
  console.error('there was an error:', error.message);
}
CommonJS
const { rename, stat } = require('node:fs/promises');

(async function(oldPath, newPath) {
  try {
    await rename(oldPath, newPath);
    const stats = await stat(newPath);
    console.log(`stats: ${JSON.stringify(stats)}`);
  } catch (error) {
    console.error('there was an error:', error.message);
  }
})('/tmp/hello', '/tmp/world');

При использовании API с обратными вызовами перенесите вызов fs.stat() в обратный вызов операции fs.rename():

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

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});
CommonJS
const { rename, stat } = require('node:fs/promises');

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});

Пути к файлам

Большинство операций fs принимают пути к файлам, которые можно указать в виде строки, объекта <Buffer> или объекта <URL> с использованием протокола file:.

Строковые пути

Строковые пути интерпретируются как последовательности символов UTF-8, обозначающие абсолютное или относительное имя файла. Относительные пути разрешаются относительно текущего рабочего каталога, определяемого вызовом process.cwd().

Пример использования абсолютного пути в POSIX:

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

let fd;
try {
  fd = await open('/open/some/file.txt', 'r');
  // Do something with the file
} finally {
  await fd?.close();
} 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

URL-адреса file: всегда представляют собой абсолютные пути.

Особенности платформ

В 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

Пути, заданные с помощью объекта <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-v22.x/docs/api/fs.html

Spec-Zone.ru

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