Spec-Zone.ru › Node.js 20 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])
История
Версия Изменения
v20.10.0

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

v15.14.0, v14.18.0

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

v14.0.0

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

v10.0.0

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

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

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

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

filehandle.chmod(mode)
Добавлено в: v10.0.0
  • mode <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])
История
Версия Изменения
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)
Добавлено в: 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])
Добавлено в: 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> | <null> Позиция, с которой начинается чтение данных из файла. Если null, данные будут прочитаны с текущей позиции в файле, а позиция будет обновлена. Если position — целое число, текущая позиция в файле останется неизменной. По умолчанию:: null
  • Возвращает: <Promise> При успешном выполнении возвращается объект с двумя свойствами:
    • bytesRead <integer> Количество прочитанных байтов
    • buffer <Buffer> | <TypedArray> | <DataView> Ссылка на переданный аргумент buffer.

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

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

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

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

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

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

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

v17.0.0

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

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

    • type <string> | <undefined> Открывать обычный поток или поток 'bytes'. По умолчанию: undefined
  • Возвращает: <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'
  • Возвращает: <Promise>

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

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

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

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

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

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

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

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

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

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

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

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

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

fsPromises.access(path[, mode])

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

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

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

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

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

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

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

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

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

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

v17.6.0, v16.15.0

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

v16.7.0

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

Стабильность: 1 — Экспериментальный
  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения, в который нужно скопировать.
  • options <Object>
    • dereference <boolean> разыменовывать символические ссылки. По умолчанию: false.
    • errorOnExist <boolean> если force равно false и путь назначения существует, выбрасывать ошибку. По умолчанию: false.
    • filter <Function> Функция для фильтрации копируемых файлов и каталогов. Возвращает true, чтобы скопировать элемент, или false, чтобы пропустить его. При пропуске каталога пропускается и все его содержимое. Также может возвращать Promise, разрешающийся в true или false По умолчанию: undefined.
      • src <string> исходный путь для копирования.
      • dest <string> путь назначения, в который нужно скопировать.
      • Возвращает: <boolean> | <Promise> Значение, приводимое к 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.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

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

v16.5.0, v14.18.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

fsPromises.opendir(path[, options])

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

Добавлен параметр 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

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

fsPromises.truncate(path[, len])

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

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

fsPromises.unlink(path)

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

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

fsPromises.utimes(path, atime, mtime)

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

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

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

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

fsPromises.watch(filename[, options])

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

История
Версия Изменения
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> позволяет отменить выполняющуюся запись файла
  • Возвращает: <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)

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

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

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

v18.0.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

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

fs.createReadStream(path[, options])

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

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

v16.10.0

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

v15.5.0

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

v15.4.0

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

v14.0.0

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

v13.6.0, v12.17.0

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

v12.10.0

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

v11.0.0

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

v7.6.0

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

v7.0.0

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

v2.3.0

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

v0.1.31

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

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

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

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

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

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

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

import { createReadStream } from 'node:fs';

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

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

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

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

import { createReadStream } from 'node:fs';

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

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

fs.createWriteStream(path[, options])

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

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

v16.10.0

Параметру fs больше не требуется метод open, если был предоставлен fd.

v16.10.0

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

v15.5.0

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

v15.4.0

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

v14.0.0

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

v13.6.0, v12.17.0

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

v12.10.0

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

v7.6.0

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

v7.0.0

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

v5.5.0

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

v2.3.0

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

v0.1.31

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

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

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

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

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

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

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

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

fs.exists(path, callback)

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

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

v7.6.0

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

v1.0.0

Устарело с: v1.0.0

v0.0.2

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

Стабильность: 0 — Устарело: вместо этого используйте fs.stat() или fs.access().
  • path <string> | <Buffer> | <URL>
  • callback <Function>
    • exists <boolean>

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

import { exists } from 'node:fs';

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

Параметры этого обратного вызова не соответствуют параметрам других обратных вызовов Node.js. Обычно первый параметр обратного вызова Node.js — это параметр err, за которым могут следовать другие параметры. У обратного вызова fs.exists() только один логический параметр. Это одна из причин, по которой рекомендуется использовать fs.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.lchmod(path, mode, callback)

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

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

v16.0.0

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

v10.0.0

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

v7.0.0

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

v0.4.7

Устарело с версии: v0.4.7

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

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

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

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

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

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

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

v10.6.0

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

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

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

v14.5.0, v12.19.0

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

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

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

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

fs.link(existingPath, newPath, callback)

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.30

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

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

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

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

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

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

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

v13.11.0, v12.17.0

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

v10.12.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.8

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

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

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

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

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

import { mkdir } from 'node:fs';

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

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

import { mkdir } from 'node:fs';

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

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

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

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

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

v18.0.0

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

v16.5.0, v14.18.0

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

v10.0.0

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

v7.0.0

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

v6.2.1

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

v5.10.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v11.1.0

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

v9.9.0

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

v7.6.0

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

v0.0.2

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

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

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

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

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

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

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

fs.openAsBlob(path[, options])

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

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

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

Модули 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

Добавлен параметр 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

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

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

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

v18.0.0

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

v10.10.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v6.0.0

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

v0.1.8

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

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

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

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

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

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

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

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

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

v16.0.0

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

v15.2.0, v14.17.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v5.1.0

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

v5.0.0

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

v0.1.29

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

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

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

import { readFile } from 'node:fs';

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

Обратному вызову передаются два аргумента (err, data), где data — содержимое файла.

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

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

import { readFile } from 'node:fs';

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

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

import { readFile } from 'node:fs';

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

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

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

import { readFile } from 'node:fs';

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

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

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

v13.13.0, v12.17.0

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

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

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

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

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

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

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

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

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

v10.0.0

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

v8.0.0

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

v7.6.0

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

v7.0.0

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

v6.4.0

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

v6.0.0

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

v0.1.31

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v9.2.0

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

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

Асинхронная версия realpath(3).

Функция callback принимает два аргумента (err, resolvedPath).

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

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

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

fs.rename(oldPath, newPath, callback)

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

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

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

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

import { rename } from 'node:fs';

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

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

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

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

v16.0.0

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

v16.0.0

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

v16.0.0

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

v14.14.0

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

v13.3.0, v12.16.0

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

v12.10.0

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

v10.0.0

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

v7.6.0

В качестве параметров path можно передавать объект WHATWG URL, использующий протокол file:.

v7.0.0

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

v0.0.2

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

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

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

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

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

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

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

В качестве параметра path можно передавать объект WHATWG URL, использующий протокол file:.

v14.14.0

Добавлено в: v14.14.0

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

В качестве параметра path можно передавать объект WHATWG URL, использующий протокол file:.

v7.0.0

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

v0.0.2

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

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

Асинхронная версия stat(2). Обратный вызов получает два аргумента (err, stats), где stats — объект <fs.Stats>.

В случае ошибки err.code будет одной из распространённых системных ошибок.

fs.stat() следует по символическим ссылкам. Чтобы просмотреть сами ссылки, используйте fs.lstat().

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

Для проверки существования файла без последующих операций с ним рекомендуется использовать fs.access().

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

- txtDir
-- file.txt
- app.js copy

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

import { stat } from 'node:fs';

const pathsToCheck = ['./txtDir', './txtDir/file.txt'];

for (let i = 0; i < pathsToCheck.length; i++) {
  stat(pathsToCheck[i], (err, stats) => {
    console.log(stats.isDirectory());
    console.log(stats);
  });
} copy

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

true
Stats {
  dev: 16777220,
  mode: 16877,
  nlink: 3,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214262,
  size: 96,
  blocks: 0,
  atimeMs: 1561174653071.963,
  mtimeMs: 1561174614583.3518,
  ctimeMs: 1561174626623.5366,
  birthtimeMs: 1561174126937.2893,
  atime: 2019-06-22T03:37:33.072Z,
  mtime: 2019-06-22T03:36:54.583Z,
  ctime: 2019-06-22T03:37:06.624Z,
  birthtime: 2019-06-22T03:28:46.937Z
}
false
Stats {
  dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214074,
  size: 8,
  blocks: 8,
  atimeMs: 1561174616618.8555,
  mtimeMs: 1561174614584,
  ctimeMs: 1561174614583.8145,
  birthtimeMs: 1561174007710.7478,
  atime: 2019-06-22T03:36:56.619Z,
  mtime: 2019-06-22T03:36:54.584Z,
  ctime: 2019-06-22T03:36:54.584Z,
  birthtime: 2019-06-22T03:26:47.711Z
} copy

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

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

Асинхронная версия statfs(2). Возвращает сведения о смонтированной файловой системе, содержащей path. Обратный вызов получает два аргумента (err, stats), где stats — объект <fs.StatFs>.

В случае ошибки err.code будет одной из распространённых системных ошибок.

fs.symlink(target, path[, type], callback)

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

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

v12.0.0

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

v7.6.0

В качестве параметров target и path можно передавать объекты WHATWG URL, использующие протокол file:. Поддержка пока носит экспериментальный характер.

v0.1.31

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

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null
  • callback <Function>
    • err <Error>

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

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

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

Относительные цели отсчитываются от родительского каталога ссылки.

import { symlink } from 'node:fs';

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

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

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

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

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

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

v16.0.0

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

v10.0.0

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

v7.0.0

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

v0.8.6

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

  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0
  • callback <Function>
    • err <Error> | <AggregateError>

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

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

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

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

fs.unlink(path, callback)

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

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

v10.0.0

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

v7.6.0

В качестве параметра path можно передавать объект WHATWG URL, использующий протокол file:.

v7.0.0

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

v0.0.2

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

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

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

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

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

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

fs.unwatchFile(filename[, listener])

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

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

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

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

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

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

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

v10.0.0

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

v8.0.0

NaN, Infinity и -Infinity больше не являются допустимыми указателями времени.

v7.6.0

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

v7.0.0

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

v4.1.0

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

v0.4.2

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

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

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

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

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

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

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

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

v15.9.0, v14.17.0

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

v7.6.0

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

v7.0.0

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

v0.5.10

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

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

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

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

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

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

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

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

Ограничения

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

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

Доступность

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

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

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

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

Индексы inode

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

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

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

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

import { watch } from 'node:fs';
watch('somedir', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
}); 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.watch вместо fs.watchFile и fs.unwatchFile.

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

Это происходит в следующих случаях:

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

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

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

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

v14.0.0

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

v10.10.0

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

v10.0.0

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

v7.4.0

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

v7.2.0

Параметры offset и length теперь являются необязательными.

v7.0.0

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

v0.0.2

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

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

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

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

v19.0.0

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

v18.0.0

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

v17.8.0

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

v16.0.0

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

v15.2.0, v14.17.0

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

v14.12.0

Параметр data преобразует объект в строку, если у него явно указана функция toString.

v14.0.0

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

v10.10.0

Теперь параметром data может быть любой TypedArray или DataView.

v10.0.0

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

v7.4.0

Теперь параметром data может быть Uint8Array.

v7.0.0

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

v5.0.0

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

v0.1.29

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

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

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

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

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

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

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

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

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

import { writeFile } from 'node:fs';

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

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

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

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

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

const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
  // When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort(); copy

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

Использование fs.writeFile() с файловыми дескрипторами

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

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

write(fd, Buffer.from(data, options.encoding), callback); copy

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

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

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

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

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

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

v12.9.0

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

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

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

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

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

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

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

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

Синхронный API

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

fs.accessSync(path[, mode])

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

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

v0.11.15

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

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

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

Если какая-либо из проверок доступности завершается неудачей, будет выброшено исключение Error. В противном случае метод вернёт undefined.

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

try {
  accessSync('etc/passwd', constants.R_OK | constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
} copy

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

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

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

v7.0.0

Переданный объект options больше не изменяется.

v5.0.0

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

v0.6.7

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

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

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

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

v17.6.0, v16.15.0

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

v16.7.0

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

Стабильность: 1 — Экспериментальный
  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения для копирования.
  • options <Object>
    • dereference <boolean> разыменовывать символические ссылки. По умолчанию: false.
    • errorOnExist <boolean> если force равно false и назначение существует, выбрасывать ошибку. По умолчанию: false.
    • filter <Function> Функция для фильтрации копируемых файлов/каталогов. Возвращает true, чтобы скопировать элемент, или false, чтобы пропустить его. При пропуске каталога пропускается и всё его содержимое. По умолчанию: 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.lchmodSync(path, mode)

Устарело с: v0.4.7
Стабильность: 0 — Устаревший API
  • 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

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

v16.5.0, v14.18.0

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

v5.10.0

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

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

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

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

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

fs.opendirSync(path[, options])

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

Добавлен параметр 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

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

v10.10.0

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

v7.6.0

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

v0.1.21

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

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

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

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

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

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

fs.readFileSync(path[, options])

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

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

v5.0.0

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

v0.1.8

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

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

Возвращает содержимое path.

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

Если указан параметр encoding, эта функция возвращает строку. В противном случае она возвращает буфер.

Как и в случае с fs.readFile(), поведение fs.readFileSync() при указании каталога в качестве пути зависит от платформы.

import { readFileSync } from 'node:fs';

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

//  FreeBSD
readFileSync('<directory>'); // => <data> copy

fs.readlinkSync(path[, options])

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

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

v0.1.31

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

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

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

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

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

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

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

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

v6.0.0

Параметр length теперь может иметь значение 0.

v0.1.21

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

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • offset <integer>
  • length <integer>
  • position <integer> | <bigint> | <null> По умолчанию: null
  • Возвращает: <number>

Возвращает количество bytesRead.

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

fs.readSync(fd, buffer[, options])

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

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

v13.13.0, v12.17.0

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

  • fd <integer>
  • buffer <Buffer> | <TypedArray> | <DataView>
  • options <Object>
    • offset <integer> По умолчанию: 0
    • length <integer> По умолчанию: buffer.byteLength - offset
    • position <integer> | <bigint> | <null> По умолчанию: null
  • Возвращает: <number>

Возвращает количество bytesRead.

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

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

fs.readvSync(fd, buffers[, position])

Добавлено в: v13.13.0, v12.17.0
  • fd <integer>
  • buffers <ArrayBufferView[]>
  • position <integer> | <null> По умолчанию: null
  • Возвращает: <number> Количество прочитанных байтов.

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

fs.realpathSync(path[, options])

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

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

v7.6.0

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

v6.4.0

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

v6.0.0

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

v0.1.31

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

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

Возвращает разрешенный путь.

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

fs.realpathSync.native(path[, options])

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

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

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

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

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

fs.renameSync(oldPath, newPath)

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

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

v0.1.21

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

  • oldPath <string> | <Buffer> | <URL>
  • newPath <string> | <Buffer> | <URL>

Переименовывает файл из oldPath в newPath. Возвращает undefined.

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

fs.rmdirSync(path[, options])

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

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

v16.0.0

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

v16.0.0

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

v14.14.0

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

v13.3.0, v12.16.0

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

v12.10.0

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

v7.6.0

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

v0.1.21

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

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

Синхронный вызов rmdir(2). Возвращает undefined.

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

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

fs.rmSync(path[, options])

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

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

v14.14.0

Добавлено в версии: v14.14.0

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

Синхронно удаляет файлы и каталоги (по образцу стандартной утилиты POSIX rm). Возвращает undefined.

fs.statSync(path[, options])

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

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

v10.5.0

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

v7.6.0

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

v0.1.21

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

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

Получает объект <fs.Stats> для указанного пути.

fs.statfsSync(path[, options])

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

Синхронный вызов statfs(2). Возвращает сведения о смонтированной файловой системе, содержащей path.

В случае ошибки err.code будет одним из значений из раздела Распространённые системные ошибки.

fs.symlinkSync(target, path[, type])

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

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

v7.6.0

Параметры target и path могут быть объектами WHATWG URL с использованием протокола file:. Эта возможность пока находится в экспериментальном статусе.

v0.1.31

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

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null

Возвращает undefined.

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

fs.truncateSync(path[, len])

Добавлено в версии: v0.8.6
  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0

Усекает файл. Возвращает undefined. В качестве первого аргумента также можно передать файловый дескриптор. В этом случае вызывается fs.ftruncateSync().

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

fs.unlinkSync(path)

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

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

v0.1.21

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

  • path <string> | <Buffer> | <URL>

Синхронный вызов unlink(2). Возвращает undefined.

fs.utimesSync(path, atime, mtime)

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

Значения NaN, Infinity и -Infinity больше нельзя использовать для указания времени.

v7.6.0

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

v4.1.0

Строки с числовыми значениями, NaN и Infinity теперь можно использовать для указания времени.

v0.4.2

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

  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

Возвращает undefined.

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

fs.writeFileSync(file, data[, options])

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

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

Класс: 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 (first-in-first-out).

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
Добавлено в: v20.12.0
Стабильность: 1 - Экспериментальный
  • <string>

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

dirent.path
Добавлено в: v20.1.0, v18.17.0Устарело с: v20.12.0
Стабильность: 0 - Устарело: вместо этого используйте dirent.parentPath.
  • <string>

Псевдоним для dirent.parentPath.

Класс: fs.FSWatcher

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

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

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

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

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

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

import { watch } from 'node:fs';
// Example when handled through fs.watch() listener
watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
  if (filename) {
    console.log(filename);
    // Prints: <Buffer ...>
  }
}); copy
Событие: 'close'
Добавлено в: v10.0.0

Генерируется, когда наблюдатель прекращает отслеживать изменения. Закрытый объект <fs.FSWatcher> больше нельзя использовать в обработчике событий.

Событие: 'error'
Добавлено в: v0.5.8
  • error <Error>

Генерируется при возникновении ошибки во время отслеживания файла. Объект <fs.FSWatcher>, в котором произошла ошибка, больше нельзя использовать в обработчике событий.

watcher.close()
Добавлено в: v0.5.8

Прекращает отслеживание изменений для указанного объекта <fs.FSWatcher>. После остановки объект <fs.FSWatcher> больше нельзя использовать.

watcher.ref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект <fs.FSWatcher>. Многократный вызов watcher.ref() не повлияет на результат.

По умолчанию для всех объектов <fs.FSWatcher> устанавливается ссылка («ref'ed»), поэтому обычно вызывать watcher.ref() не требуется, если ранее не был вызван watcher.unref().

watcher.unref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове активный объект <fs.FSWatcher> перестает требовать, чтобы цикл событий Node.js оставался активным. Если другая активность не поддерживает работу цикла событий, процесс может завершиться до вызова колбэка объекта <fs.FSWatcher>. Многократный вызов watcher.unref() не повлияет на результат.

Класс: fs.StatWatcher

Добавлено в: v14.3.0, v12.20.0
  • Наследуется от <EventEmitter>

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

watcher.ref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект <fs.StatWatcher>. Многократный вызов watcher.ref() не повлияет на результат.

По умолчанию для всех объектов <fs.StatWatcher> устанавливается ссылка («ref'ed»), поэтому обычно вызывать watcher.ref() не требуется, если ранее не был вызван watcher.unref().

watcher.unref()
Добавлено в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове активный объект <fs.StatWatcher> перестает требовать, чтобы цикл событий Node.js оставался активным. Если другая активность не поддерживает работу цикла событий, процесс может завершиться до вызова колбэка объекта <fs.StatWatcher>. Многократный вызов watcher.unref() не повлияет на результат.

Класс: fs.ReadStream

Добавлено в: v0.1.93
  • Наследуется от: <stream.Readable>

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

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

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

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

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

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

Генерируется, когда объект <fs.ReadStream> готов к использованию.

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

readStream.bytesRead
Добавлено в: v6.4.0
  • <number>

Количество байтов, считанных на данный момент.

readStream.path
Добавлено в: v0.1.93
  • <string> | <Buffer>

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

readStream.pending
Добавлено в: v11.2.0, v10.16.0
  • <boolean>

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

Класс: fs.Stats

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

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

Значения времени в объекте stat имеют следующую семантику:

  • atime «Время доступа»: время последнего обращения к данным файла. Изменяется системными вызовами mknod(2), utimes(2) и read(2).
  • mtime «Время изменения»: время последнего изменения данных файла. Изменяется системными вызовами mknod(2), utimes(2) и write(2).
  • ctime «Время изменения состояния»: время последнего изменения состояния файла (изменения данных inode). Изменяется системными вызовами chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2), read(2) и write(2).
  • birthtime «Время создания»: время создания файла. Устанавливается один раз при создании файла. В файловых системах, где время создания недоступно, это поле может содержать значение ctime или 1970-01-01T00:00Z (то есть временную метку эпохи Unix 0). В этом случае это значение может быть больше, чем atime или mtime. В Darwin и других вариантах FreeBSD оно также устанавливается, если atime явно задается значением, более ранним, чем текущее birthtime, с помощью системного вызова utimes(2).

До Node.js 0.12 свойство ctime содержало значение birthtime в системах Windows. Начиная с версии 0.12, ctime не означает «время создания», и в системах Unix оно никогда не имело такого значения.

Класс: fs.StatFs

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

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

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

StatFs {
  type: 1397114950,
  bsize: 4096,
  blocks: 121938943,
  bfree: 61058895,
  bavail: 61058895,
  files: 999,
  ffree: 1000000
} copy

версия bigint:

StatFs {
  type: 1397114950n,
  bsize: 4096n,
  blocks: 121938943n,
  bfree: 61058895n,
  bavail: 61058895n,
  files: 999n,
  ffree: 1000000n
} copy
statfs.bavail
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

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

statfs.bfree
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Свободные блоки в файловой системе.

statfs.blocks
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Общее количество блоков данных в файловой системе.

statfs.bsize
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Оптимальный размер блока передачи.

statfs.ffree
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Свободные файловые узлы в файловой системе.

statfs.files
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Общее количество файловых узлов в файловой системе.

statfs.type
Добавлено в: v19.6.0, v18.15.0
  • <number> | <bigint>

Тип файловой системы.

Класс: fs.WriteStream

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

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

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

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

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

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

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

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

Вызывается сразу после 'open'.

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

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

writeStream.close([callback])
Добавлено в: 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-v20.x/docs/api/fs.html

Spec-Zone.ru

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