Spec-Zone.ru › Node.js 24 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 на основе промисов, если требуется максимальная производительность (как с точки зрения времени выполнения, так и выделения памяти).

Пример синхронного выполнения

Синхронные 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])
История
Версия Изменения
v24.2.0

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

v24.0.0

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

v23.8.0, 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> позволяет отменить выполняющийся вызов readFile
  • Возвращает: <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]()
История
Версия Изменения
v24.2.0

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

v20.4.0, v18.18.0

Добавлено в: v20.4.0, v18.18.0

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

fsPromises.access(path[, mode])

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

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

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

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

try {
  await access('/etc/passwd', constants.R_OK | constants.W_OK);
  console.log('can access');
} catch {
  console.error('cannot access');
} 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, нижележащий файловый дескриптор сбрасывается перед закрытием. По умолчанию: 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> Необязательные модификаторы, задающие поведение операции копирования. Можно создать маску, выполнив побитовое ИЛИ для двух или более значений (например, 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])

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

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

v24.0.0

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

v23.7.0, 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> Асинхронный итератор, выдающий пути к файлам, соответствующим шаблону.
Модули 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 не указывает на символическую ссылку; в этом случае сведения извлекаются о самой ссылке, а не о файле, на который она указывает. Дополнительные сведения см. в документации 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.mkdtempDisposable(prefix[, options])

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

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

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

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

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

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

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

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

fsPromises.truncate(path[, len])

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

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

fsPromises.unlink(path)

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

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

fsPromises.utimes(path, atime, mtime)

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

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

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

  • Значениями могут быть числа, представляющие время эпохи Unix, Dates или числовая строка, например '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> Если событий для постановки в очередь больше, чем допускает maxQueue, значение может быть 'ignore' или 'throw'. 'ignore' означает, что события переполнения отбрасываются и выводится предупреждение, а 'throw' означает, что будет выброшено исключение. По умолчанию: 'ignore'.
    • ignore <string> | <RegExp> | <Function> | <Array> Шаблон(ы), которые следует игнорировать. Строки являются шаблонами glob (с использованием minimatch), шаблоны RegExp проверяются на соответствие имени файла, а функциям передается имя файла; они возвращают true, если его нужно игнорировать. По умолчанию: undefined.
  • Возвращает: <AsyncIterator> объектов со следующими свойствами:
    • eventType <string> Тип изменения
    • filename <string> | <Buffer> | <null> Имя измененного файла.

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

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

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

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

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

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

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

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

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

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

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

fs.exists(path, callback)

История
Версия Изменения
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.access() вместо fs.exists().

Если 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)

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

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

v24.0.0

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

v23.7.0, 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 в аргумент 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>

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

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

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

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

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

Передача недопустимого callback в аргумент 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>

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

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

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

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

Передача недопустимого callback в аргумент 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(), за исключением того, что если путь указывает на символическую ссылку, она не разыменовывается: вместо этого изменяются временные метки самой символической ссылки.

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

fs.link(existingPath, newPath, callback)

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

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

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

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

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

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

v13.11.0, v12.17.0

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

v10.12.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.8

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

  • path <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 (права доступа и биты закрепления), или объектом со свойством 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 задает режим файла (права доступа и биты закрепления), но только если файл был создан. В Windows можно изменять только право на запись; см. fs.chmod().

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

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

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

fs.openAsBlob(path[, options])

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

API признан стабильным.

v19.8.0

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v5.1.0

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

v5.0.0

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

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

Добавлена поддержка разрешения путей Pipe/Socket.

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>

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

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

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

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

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

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

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

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

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

Необязательный аргумент 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 в аргумент 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). В callback завершения передаются только аргументы, необходимые для возможного исключения.

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

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). Callback получает два аргумента (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. Callback получает два аргумента (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 имеет значение null, 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.
    • ignore <string> | <RegExp> | <Function> | <Array> Шаблоны для игнорирования. Строки являются glob-шаблонами (с использованием minimatch), шаблоны RegExp проверяются на соответствие имени файла, а функции получают имя файла и возвращают true, чтобы игнорировать его. По умолчанию: undefined.
  • listener <Function> | <undefined> По умолчанию: undefined
    • eventType <string>
    • filename <string> | <Buffer> | <null>
  • Возвращает: <fs.FSWatcher>

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

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

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

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

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

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

Оговорки

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

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

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

Доступность

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

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

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

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

Inode

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

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

Аргумент filename

Передача аргумента 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 в аргумент 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() несколько раз для одного и того же файла, не дожидаясь callback. В этом случае рекомендуется использовать fs.createWriteStream().

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

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

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

const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
  // When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort(); 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 в аргумент 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[]>

Записывает массив ArrayBufferViews в файл, указанный в fd, используя writev().

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

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

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

Небезопасно использовать fs.writev() несколько раз для одного и того же файла, не дожидаясь callback. В этом случае используйте 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, либо маска, состоящая из побитового ИЛИ любых значений из 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 — необязательное целое число, задающее поведение операции копирования. Можно создать маску, состоящую из побитового ИЛИ двух или более значений (например, 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])

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

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

v24.0.0

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

v23.7.0, 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.
  • Возвращает: <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.mkdtempDisposableSync(prefix[, options])

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

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

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

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

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

Можно передать объект options, чтобы сделать параметры 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

Добавлена поддержка разрешения путей Pipe/Socket.

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

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

v24.1.0

Добавлено в: v24.1.0

Вызывает dir.close(), если дескриптор каталога открыт, и возвращает промис, который выполняется после завершения освобождения ресурса.

dir[Symbol.dispose]()
История
Версия Изменения
v24.2.0

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

v24.1.0

Добавлено в: v24.1.0

Вызывает dir.closeSync(), если дескриптор каталога открыт, и возвращает undefined.

Класс: fs.Dirent

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

Представление записи каталога, которой может быть файл или подкаталог внутри каталога, получаемое при чтении из <fs.Dir>. Запись каталога представляет собой пару из имени файла и типа файла.

Кроме того, если при вызове fs.readdir() или fs.readdirSync() для параметра withFileTypes задано значение true, результирующий массив будет содержать объекты <fs.Dirent>, а не строки или объекты <Buffer>.

dirent.isBlockDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает блочное устройство.

dirent.isCharacterDevice()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символьное устройство.

dirent.isDirectory()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает каталог файловой системы.

dirent.isFIFO()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает канал FIFO (первым поступил — первым обслужен).

dirent.isFile()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает обычный файл.

dirent.isSocket()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает сокет.

dirent.isSymbolicLink()
Добавлено в: v10.10.0
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Dirent> описывает символическую ссылку.

dirent.name
Добавлено в: v10.10.0
  • Тип: <string> | <Buffer>

Имя файла, на который ссылается этот объект <fs.Dirent>. Тип этого значения определяется параметром options.encoding, переданным в fs.readdir() или fs.readdirSync().

dirent.parentPath
История
Версия Изменения
v24.0.0

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

v21.4.0, v20.12.0, v18.20.0

Добавлено в: v21.4.0, v20.12.0, v18.20.0

  • Тип: <string>

Путь к родительскому каталогу файла, на который ссылается этот объект <fs.Dirent>.

Класс: fs.FSWatcher

Добавлено в: v0.5.8
  • Наследует <EventEmitter>

При успешном вызове метода fs.watch() возвращается новый объект <fs.FSWatcher>.

Все объекты <fs.FSWatcher> генерируют событие 'change' при изменении определённого отслеживаемого файла.

Событие: 'change'
Добавлено в: v0.5.8
  • eventType <string> Тип произошедшего события изменения
  • filename <string> | <Buffer> Имя изменённого файла (если применимо/доступно)

Генерируется при изменении отслеживаемого каталога или файла. Подробнее см. в разделе fs.watch().

Аргумент filename может не передаваться в зависимости от поддержки операционной системы. Если filename передан, он будет представлен как <Buffer>, если метод fs.watch() вызван с параметром encoding, установленным в 'buffer'; в противном случае filename будет строкой UTF-8.

import { watch } from 'node:fs';
// Example when handled through fs.watch() listener
watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
  if (filename) {
    console.log(filename);
    // Prints: <Buffer ...>
  }
}); 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, v20.13.0

Общедоступный конструктор устарел.

v8.1.0

Добавлены значения времени в виде чисел.

v0.1.21

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

Объект <fs.Stats> содержит сведения о файле.

Объекты, возвращаемые методами fs.stat(), fs.lstat(), fs.fstat() и их синхронными аналогами, имеют этот тип. Если bigint в options, переданном этим методам, имеет значение true, числовые значения будут представлены как bigint, а не как number, и объект будет содержать дополнительные свойства с наносекундной точностью, оканчивающиеся на Ns. Объекты Stat не следует создавать напрямую с помощью ключевого слова new.

Stats {
  dev: 2114,
  ino: 48064969,
  mode: 33188,
  nlink: 1,
  uid: 85,
  gid: 100,
  rdev: 0,
  size: 527,
  blksize: 4096,
  blocks: 8,
  atimeMs: 1318289051000.1,
  mtimeMs: 1318289051000.1,
  ctimeMs: 1318289051000.1,
  birthtimeMs: 1318289051000.1,
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT } copy

Версия bigint:

BigIntStats {
  dev: 2114n,
  ino: 48064969n,
  mode: 33188n,
  nlink: 1n,
  uid: 85n,
  gid: 100n,
  rdev: 0n,
  size: 527n,
  blksize: 4096n,
  blocks: 8n,
  atimeMs: 1318289051000n,
  mtimeMs: 1318289051000n,
  ctimeMs: 1318289051000n,
  birthtimeMs: 1318289051000n,
  atimeNs: 1318289051000000000n,
  mtimeNs: 1318289051000000000n,
  ctimeNs: 1318289051000000000n,
  birthtimeNs: 1318289051000000000n,
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT } copy
stats.isBlockDevice()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает блочное устройство.

stats.isCharacterDevice()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

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

stats.isDirectory()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

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

Если объект <fs.Stats> был получен при вызове fs.lstat() для символической ссылки, указывающей на каталог, этот метод вернёт false. Это происходит потому, что fs.lstat() возвращает сведения о самой символической ссылке, а не о пути, на который она указывает.

stats.isFIFO()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает канал FIFO (первым пришёл — первым ушёл).

stats.isFile()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает обычный файл.

stats.isSocket()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает сокет.

stats.isSymbolicLink()
Добавлено в версии: v0.1.10
  • Возвращает: <boolean>

Возвращает true, если объект <fs.Stats> описывает символическую ссылку.

Этот метод применим только при использовании fs.lstat().

stats.dev
  • Тип: <number> | <bigint>

Числовой идентификатор устройства, на котором находится файл.

stats.ino
  • Тип: <number> | <bigint>

Специфичный для файловой системы номер inode файла.

stats.mode
  • Тип: <number> | <bigint>

Битовое поле, описывающее тип и режим файла.

stats.nlink
  • Тип: <number> | <bigint>

Количество жёстких ссылок на файл.

stats.uid
  • Тип: <number> | <bigint>

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

stats.gid
  • Тип: <number> | <bigint>

Числовой идентификатор группы, которой принадлежит файл (POSIX).

stats.rdev
  • Тип: <number> | <bigint>

Числовой идентификатор устройства, если файл представляет собой устройство.

stats.size
  • Тип: <number> | <bigint>

Размер файла в байтах.

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

stats.blksize
  • Тип: <number> | <bigint>

Размер блока файловой системы для операций ввода-вывода.

stats.blocks
  • Тип: <number> | <bigint>

Количество блоков, выделенных для этого файла.

stats.atimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени, указывающая время последнего доступа к файлу, в миллисекундах с начала эпохи POSIX.

stats.mtimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени, указывающая время последнего изменения файла, в миллисекундах с начала эпохи POSIX.

stats.ctimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени, указывающая время последнего изменения состояния файла, в миллисекундах с начала эпохи POSIX.

stats.birthtimeMs
Добавлено в версии: v8.1.0
  • Тип: <number> | <bigint>

Метка времени, указывающая время создания файла, в миллисекундах с начала эпохи POSIX.

stats.atimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени, указывающая время последнего доступа к файлу, в наносекундах с начала эпохи POSIX.

stats.mtimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени, указывающая время последнего изменения файла, в наносекундах с начала эпохи POSIX.

stats.ctimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени, указывающая время последнего изменения состояния файла, в наносекундах с начала эпохи POSIX.

stats.birthtimeNs
Добавлено в версии: v12.10.0
  • Тип: <bigint>

Присутствует только в том случае, если в метод, создающий объект, передано bigint: true. Метка времени, указывающая время создания файла, в наносекундах с начала эпохи POSIX.

stats.atime
Добавлено в версии: v0.11.13
  • Тип: <Date>

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

stats.mtime
Добавлено в версии: v0.11.13
  • Тип: <Date>

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

stats.ctime
Добавлено в версии: v0.11.13
  • Тип: <Date>

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

stats.birthtime
Добавлено в версии: v0.11.13
  • Тип: <Date>

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

Значения времени Stat

Свойства atimeMs, mtimeMs, ctimeMs, birthtimeMs — это числовые значения, содержащие соответствующее время в миллисекундах. Их точность зависит от платформы. Если в метод, создающий объект, передан параметр bigint: true, значения свойств будут иметь тип 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 в системах Windows ctime содержало значение birthtime. Начиная с версии 0.12, ctime не является «временем создания»; в системах Unix оно никогда им не было.

Класс: fs.StatFs

Добавлено в: v19.6.0, v18.15.0

Предоставляет информацию о смонтированной файловой системе.

Объекты, возвращаемые функцией fs.statfs() и её синхронным аналогом, имеют этот тип. Если в параметре options, переданном этим методам, значение bigint равно true, вместо number числовые значения будут иметь тип bigint.

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

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

Оптимизированный поток записи UTF-8, позволяющий при необходимости сбрасывать всю внутреннюю буферизацию. Он корректно обрабатывает ошибки EAGAIN, позволяя настраивать поведение, например отбрасывать данные, если диск занят.

Событие: 'close'

Событие 'close' возникает, когда поток полностью закрыт.

Событие: 'drain'

Событие 'drain' возникает, когда внутренний буфер освобождает достаточно места для продолжения записи.

Событие: 'drop'

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

Событие: 'error'

Событие 'error' возникает при ошибке.

Событие: 'finish'

Событие 'finish' возникает, когда поток завершён и все данные сброшены в базовый файл.

Событие: 'ready'

Событие 'ready' возникает, когда поток готов принимать данные для записи.

Событие: 'write'

Событие 'write' возникает по завершении операции записи. Количество записанных байтов передаётся обработчику события в качестве первого аргумента.

new fs.Utf8Stream([options])
  • options <Object>
    • append: <boolean> Добавляет записываемые данные в конец целевого файла вместо его усечения. По умолчанию: true.
    • contentMode: <string> Тип данных, которые можно передавать функции записи; поддерживаются значения 'utf8' или 'buffer'. По умолчанию: 'utf8'.
    • dest: <string> Путь к файлу для записи (режим определяется параметром append).
    • fd: <number> Дескриптор файла, возвращаемый функцией fs.open() или fs.openSync().
    • fs: <Object> Объект с тем же API, что и у модуля fs; полезен для имитации, тестирования или настройки поведения потока.
    • fsync: <boolean> Выполнять fs.fsyncSync() после каждого завершения записи.
    • maxLength: <number> Максимальная длина внутреннего буфера. Если операция записи приведёт к превышению буфером значения maxLength, записываемые данные будут отброшены, а событие drop будет передано с отброшенными данными.
    • maxWrite: <number> Максимальное количество байтов, которые можно записать; По умолчанию: 16384
    • minLength: <number> Минимальная длина внутреннего буфера, необходимая для его заполнения перед сбросом.
    • mkdir: <boolean> Если значение true, проверить наличие каталога для файла dest. По умолчанию: false.
    • mode: <number> | <string> Указать режим создания файла (см. fs.open()).
    • periodicFlush: <number> Вызывать flush каждые periodicFlush миллисекунд.
    • retryEAGAIN <Function> Функция, вызываемая, когда write(), writeSync() или flushSync() сталкивается с ошибкой EAGAIN или EBUSY. Если возвращаемое значение — true, операция будет повторена; в противном случае ошибка будет передана дальше. err — ошибка, вызвавшая вызов этой функции, writeBufferLen — длина записанного буфера, а remainingBufferLen — длина оставшейся части буфера, которую поток не пытался записать.
      • err <any> Ошибка или null.
      • writeBufferLen <number>
      • remainingBufferLen: <number>
    • sync: <boolean> Выполнять запись синхронно.
utf8Stream.append
  • <boolean> Определяет, добавляет ли поток данные в конец файла или усекает его.
utf8Stream.contentMode
  • <string> Тип данных, которые можно записать в поток. Поддерживаются значения 'utf8' или 'buffer'. По умолчанию: 'utf8'.
utf8Stream.destroy()

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

utf8Stream.end()

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

utf8Stream.fd
  • <number> Дескриптор файла, в который выполняется запись.
utf8Stream.file
  • <string> Файл, в который выполняется запись.
utf8Stream.flush(callback)
  • callback <Function>
    • err <Error> | <null> Ошибка, если сброс не удался; в противном случае — null.

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

utf8Stream.flushSync()

Синхронно сбрасывает буферизованные данные. Это затратная операция.

utf8Stream.fsync
  • <boolean> Определяет, выполняет ли поток fs.fsyncSync() после каждой операции записи.
utf8Stream.maxLength
  • <number> Максимальная длина внутреннего буфера. Если операция записи приведёт к превышению буфером значения maxLength, записываемые данные будут отброшены, а событие drop будет передано с отброшенными данными.
utf8Stream.minLength
  • <number> Минимальная длина внутреннего буфера, необходимая для его заполнения перед сбросом.
utf8Stream.mkdir
  • <boolean> Определяет, должен ли поток проверять наличие каталога для файла dest. Если значение равно true, каталог будет создан, если он не существует. По умолчанию: false.
utf8Stream.mode
  • <number> | <string> Режим файла, в который выполняется запись.
utf8Stream.periodicFlush
  • <number> Интервал между сбросами в миллисекундах. Если указано значение 0, периодические сбросы выполняться не будут.
utf8Stream.reopen(file)
  • file: <string> | <Buffer> | <URL> Путь к файлу для записи (режим определяется параметром append).

Повторно открывает файл на месте; полезно при ротации журналов.

utf8Stream.sync
  • <boolean> Определяет, выполняет ли поток запись синхронно или асинхронно.
utf8Stream.write(data)
  • data <string> | <Buffer> Данные для записи.
  • Возвращает <boolean>

Если при создании потока для options.contentMode указано значение 'utf8', аргумент data должен быть строкой. Если для contentMode указано значение 'buffer', аргумент data должен иметь тип <Buffer>.

utf8Stream.writing
  • <boolean> Определяет, записывает ли поток данные в файл в данный момент.
utf8Stream[Symbol.dispose]()

Вызывает utf8Stream.destroy().

Класс: fs.WriteStream

Добавлено в: v0.1.93
  • Расширяет <stream.Writable>

Экземпляры <fs.WriteStream> создаются и возвращаются с помощью функции fs.createWriteStream().

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

Возникает, когда нижележащий файловый дескриптор <fs.WriteStream> закрыт.

Событие: 'open'
Добавлено в: v0.1.93
  • fd <integer> Целочисленный файловый дескриптор, используемый <fs.WriteStream>.

Возникает, когда файл <fs.WriteStream> открыт.

Событие: 'ready'
Добавлено в: v9.11.0

Возникает, когда <fs.WriteStream> готов к использованию.

Срабатывает сразу после 'open'.

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

Количество байтов, записанных на данный момент. Не включает данные, которые ещё ожидают записи в очереди.

writeStream.close([callback])
Добавлено в: v0.9.4
  • callback <Function>
    • err <Error>

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

writeStream.path
Добавлено в: v0.1.93

Путь к файлу, в который записывает поток, указанный в первом аргументе функции fs.createWriteStream(). Если path передан как строка, то writeStream.path будет строкой. Если path передан как <Buffer>, то writeStream.path будет <Buffer>.

writeStream.pending
Добавлено в: v11.2.0
  • Тип: <boolean>

Это свойство имеет значение true, если нижележащий файл ещё не открыт, то есть до возникновения события 'ready'.

fs.constants

  • Тип: <Object>

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

Константы FS

Следующие константы экспортируются модулями fs.constants и fsPromises.constants.

Не все константы доступны во всех операционных системах; это особенно важно для Windows, где недоступны многие определения, специфичные для POSIX. Для переносимых приложений рекомендуется проверять наличие констант перед их использованием.

Чтобы использовать несколько констант, применяйте оператор побитового ИЛИ |.

Пример:

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

const {
  O_RDWR,
  O_CREAT,
  O_EXCL,
} = constants;

open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
  // ...
}); 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 объекты <URL> file: с именем хоста преобразуются в пути UNC, а объекты <URL> file: с буквами диска преобразуются в локальные абсолютные пути. Объекты <URL> file: без имени хоста и буквы диска приведут к ошибке:

import { readFileSync } from 'node:fs';
// On Windows :

// - WHATWG file URLs with hostname convert to UNC path
// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
readFileSync(new URL('file://hostname/p/a/t/h/file'));

// - WHATWG file URLs with drive letters convert to absolute path
// file:///C:/tmp/hello => C:\tmp\hello
readFileSync(new URL('file:///C:/tmp/hello'));

// - WHATWG file URLs without hostname must have a drive letters
readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
readFileSync(new URL('file:///c/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute copy

Объекты <URL> file: с буквами диска должны использовать : в качестве разделителя сразу после буквы диска. Использование другого разделителя приведёт к ошибке.

На всех остальных платформах объекты <URL> file: с именем хоста не поддерживаются и приведут к ошибке:

import { readFileSync } from 'node:fs';
// On other platforms:

// - WHATWG file URLs with hostname are unsupported
// file://hostname/p/a/t/h/file => throw!
readFileSync(new URL('file://hostname/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute

// - WHATWG file URLs convert to absolute path
// file:///tmp/hello => /tmp/hello
readFileSync(new URL('file:///tmp/hello')); copy

Объект <URL> file: с закодированными символами косой черты приведёт к ошибке на всех платформах:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */

// On POSIX
readFileSync(new URL('file:///p/a/t/h/%2F'));
readFileSync(new URL('file:///p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
/ characters */ copy

В Windows объекты <URL> file: с закодированной обратной косой чертой приведут к ошибке:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/path/%5C'));
readFileSync(new URL('file:///C:/path/%5c'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */ 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-v24.x/docs/api/fs.html

Spec-Zone.ru

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