Spec-Zone.ru › Node.js

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

Устойчивость: 2 - Стабильно

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

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

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

Модули MJS

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

Модули CJS

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

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

Модули MJS

import * as fs from 'node:fs';

Модули CJS

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

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

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

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

Модули MJS

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

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

Модули CJS

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

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

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

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

Модули MJS

import { unlink } from 'node:fs';

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

Модули CJS

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

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

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

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

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

Модули MJS

import { unlinkSync } from 'node:fs';

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

Модули CJS

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

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

API обещаний

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

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

v11.14.0, v10.17.0

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

v10.1.0

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

v10.0.0

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

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

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

Класс: FileHandle

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

Объект <FileHandle> — это обертка над числовым дескриптором файла.

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

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

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

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

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

filehandle.appendFile(data[, options])
История
Версия Изменения
v21.1.0, v20.10.0

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

v15.14.0, v14.18.0

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

v14.0.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v16.11.0

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

v13.11.0, v12.17.0

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

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

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

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

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

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

v18.2.0, v16.17.0

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

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

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

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

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

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

v17.0.0

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

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

    • type <строка> | <неопределено> Указывает, открывать обычный или 'bytes' поток. По умолчанию: undefined
  • Возвращает: <ReadableStream>

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

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

MJS модули

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

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

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

await file.close();

CJS модули

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

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

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

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

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

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

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

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

У <FileHandle> должна быть возможность чтения.

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

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

Удобный метод для создания интерфейса readline и потока над файлом. См. filehandle.createReadStream() для параметров.

MJS модули

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

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

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

CJS модули

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

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

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

Чтение из файла и запись в массив <ArrayBufferView>s.

filehandle.stat([options])
История
Версия Изменения
v10.5.0

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

v10.0.0

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

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

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

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

Усечение файла.

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

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

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

v14.0.0

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

v10.0.0

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

  • data <строка> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Iterable> | <Поток>
  • options <Объект> | <строка>
    • encoding <строка> | <null> Ожидаемая кодировка символов, когда data является строкой. По умолчанию: 'utf8'
  • Возвращает: <Promise>

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

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

У <FileHandle> должна быть возможность записи.

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

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

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

Запись массива <ArrayBufferView> в файл.

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

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

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

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

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

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

fsPromises.access(path[, mode])

Добавлен в: v10.0.0
  • path <строка> | <Buffer> | <URL>
  • mode <целое> По умолчанию: 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.

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

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

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

fsPromises.chmod(path, mode)

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

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

fsPromises.chown(path, uid, gid)

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

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

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

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

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

v20.1.0, v18.17.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

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

fsPromises.glob(pattern[, options])

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

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

v22.0.0

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

Уровень стабильности: 1 - Экспериментальный
  • pattern <строка> | <массив строк>
  • options <Объект>
    • cwd <строка> текущая рабочая директория. По умолчанию: process.cwd()
    • exclude <Функция> Функция для фильтрации файлов/директорий. Возвращает true для исключения элемента, false для включения. По умолчанию: undefined.
    • withFileTypes <логическое значение> true если glob должен возвращать пути в виде Dirents, false в противном случае. По умолчанию: false.
  • Возвращает: <Асинхронный итератор> Асинхронный итератор, который возвращает пути файлов, соответствующие шаблону.

MJS модули

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

for await (const entry of glob('**/*.js'))
  console.log(entry);

CJS модули

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

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

fsPromises.lchmod(path, mode)

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

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

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

fsPromises.lchown(path, uid, gid)

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

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

v10.0.0

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

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

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

fsPromises.lutimes(path, atime, mtime)

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

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

fsPromises.link(existingPath, newPath)

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

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

fsPromises.lstat(path[, options])

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

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

v10.0.0

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

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

Эквивалентно fsPromises.stat(), если path не ссылается на символическую ссылку, в противном случае, информация о самой ссылке, а не о файле, на который она ссылается, выводится с помощью stat.

fsPromises.mkdir(path[, options])

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

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

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

MJS модули

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

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

  console.log(`created ${createDir}`);
} catch (err) {
  console.error(err.message);
}

CJS модули

const { mkdir } = require('node:fs/promises');
const { join } = require('node:path');

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

  console.log(dirCreation);
  return dirCreation;
}

makeDirectory().catch(console.error);

fsPromises.mkdtemp(prefix[, options])

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

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

v16.5.0, v14.18.0

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

v10.0.0

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

  • prefix <строка> | <Buffer> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: '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 <строка> | <Buffer> | <URL>
  • flags <строка> | <число> См. поддержку флагов файловой системы flags. По умолчанию: 'r'.
  • mode <строка> | <целое число> Устанавливает режим файла (разрешения и биты склеивания), если файл создаётся. По умолчанию: 0o666 (чтение и запись)
  • Возвращает: <Promise> Выполняется с объектом <FileHandle>.

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

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

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

fsPromises.opendir(path[, options])

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

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

v13.1.0, v12.16.0

Был добавлен параметр bufferSize.

v12.12.0

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

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

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

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

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

Пример использования асинхронной итерации:

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

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

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

fsPromises.readdir(path[, options])

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

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

v10.11.0

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

v10.0.0

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

  • path <строка> | <Buffer> | <URL>
  • options <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <логическое значение> По умолчанию: false
    • recursive <логическое значение> Если 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, расположенного в той же директории, что и исполняемый код:

MJS модули

import { readFile } from 'node:fs/promises';
try {
  const filePath = new URL('./package.json', import.meta.url);
  const contents = await readFile(filePath, { encoding: 'utf8' });
  console.log(contents);
} catch (err) {
  console.error(err.message);
}

CJS модули

const { readFile } = require('node:fs/promises');
const { resolve } = require('node:path');
async function logFile() {
  try {
    const filePath = resolve('./package.json');
    const contents = await readFile(filePath, { encoding: 'utf8' });
    console.log(contents);
  } catch (err) {
    console.error(err.message);
  }
}
logFile();

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

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

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

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

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

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

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

fsPromises.readlink(path[, options])

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

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

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

fsPromises.realpath(path[, options])

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

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

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

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

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

fsPromises.rename(oldPath, newPath)

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

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

fsPromises.rmdir(path[, options])

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

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

v16.0.0

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

v16.0.0

Опция recursive устарела, её использование вызывает предупреждение об устаревании.

v14.14.0

Опция recursive устарела, используйте fsPromises.rm вместо неё.

v13.3.0, v12.16.0

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

v12.10.0

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

v10.0.0

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

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

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

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

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

fsPromises.rm(path[, options])

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

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

fsPromises.stat(path[, options])

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

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

v10.0.0

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

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

fsPromises.statfs(path[, options])

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

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

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

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

v10.0.0

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

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

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

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

fsPromises.truncate(path[, len])

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

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

fsPromises.unlink(path)

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

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

fsPromises.utimes(path, atime, mtime)

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

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

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

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

fsPromises.watch(filename[, options])

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

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

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

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

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

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

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

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

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

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

v15.14.0, v14.18.0

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

v15.2.0, v14.17.0

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

v14.0.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fsPromises.constants

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

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

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

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

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

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

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

Постоянные значения fs.F_OK, fs.R_OK, fs.W_OK и fs.X_OK, которые были непосредственно в fs, устарели.

v18.0.0

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

v7.6.0

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

v6.3.0

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

v0.11.15

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

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

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

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

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

const file = 'package.json';

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

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

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

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

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

write (НЕ РЕКОМЕНДУЕТСЯ)

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

write (РЕКОМЕНДУЕТСЯ)

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

read (НЕ РЕКОМЕНДУЕТСЯ)

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

read (РЕКОМЕНДУЕТСЯ)

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

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

    throw err;
  }

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

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

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

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

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

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

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

v18.0.0

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

v10.0.0

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

v7.0.0

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

v7.0.0

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

v5.0.0

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

v0.6.7

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

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

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

Опция 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 <строка> | <Буфер> | <URL>
  • mode <строка> | <целое число>
  • callback <Функция>
    • err <Ошибка>

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

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

import { chmod } from 'node:fs';

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

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

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

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

fs.close(fd[, callback])

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

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

v15.9.0, v14.17.0

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

v10.0.0

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

v7.0.0

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

v0.0.2

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

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

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

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

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

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

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

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

v14.0.0

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

v8.5.0

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

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

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

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

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

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

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

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

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

v20.1.0, v18.17.0

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

v18.0.0

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

v17.6.0, v16.15.0

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

v16.7.0

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

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

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

При копировании каталога в другой каталог шаблоны не поддерживаются, и поведение аналогично 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 <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • flags <строка> См. поддержку файловой системы flags. По умолчанию: 'r'.
    • encoding <строка> По умолчанию: null
    • fd <целое число> | <Дескриптор файла> По умолчанию: null
    • mode <целое число> По умолчанию: 0o666
    • autoClose <boolean> По умолчанию: true
    • emitClose <boolean> По умолчанию: true
    • start <целое число>
    • end <целое число> По умолчанию: Infinity
    • highWaterMark <целое число> По умолчанию: 64 * 1024
    • fs <Объект> | <null> По умолчанию: null
    • signal <Сигнал прерывания> | <null> По умолчанию: null
  • Возвращает: <fs.Поток чтения>

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

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

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

Если 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 ложно, то дескриптор файла не будет закрыт, даже если произошла ошибка. Приложением необходимо закрыть его и убедиться, что нет утечки дескрипторов файлов. Если autoClose установлено в истинное значение (по умолчанию), при 'error' или 'end' дескриптор файла будет закрыт автоматически.

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

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

import { createReadStream } from 'node:fs';

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

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

fs.createWriteStream(path[, options])

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

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

v16.10.0

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

v16.10.0

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

v15.5.0

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

v15.4.0

Опция fd принимает аргументы FileHandle.

v14.0.0

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

v13.6.0, v12.17.0

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

v12.10.0

Включена опция emitClose.

v7.6.0

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

v7.0.0

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

v5.5.0

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

v2.3.0

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

v0.1.31

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

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

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

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

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

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

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

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

fs.exists(path, callback)

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

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

v7.6.0

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

v1.0.0

Устарело начиная с: v1.0.0

v0.0.2

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

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

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

import { exists } from 'node:fs';

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

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

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

write (НЕ РЕКОМЕНДУЕТСЯ)

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

write (РЕКОМЕНДУЕТСЯ)

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

read (НЕ РЕКОМЕНДУЕТСЯ)

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

read (РЕКОМЕНДУЕТСЯ)

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

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

    throw err;
  }

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

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

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

fs.fchmod(fd, mode, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

fs.fdatasync(fd, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.1.96

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

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.0.0

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

v0.1.95

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

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

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

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

fs.fsync(fd, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.1.96

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

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

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

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

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

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

v10.0.0

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

v7.0.0

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

v0.8.6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

v7.0.0

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

v4.1.0

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

v0.4.2

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

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

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

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

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

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

v22.0.0

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

Устойчивость: 1 - Экспериментальная
  • pattern <строка> | <массив_строк>

  • options <Объект>

    • cwd <строка> текущий рабочий каталог. По умолчанию: process.cwd()
    • exclude <Функция> Функция для фильтрации файлов/каталогов. Возврат true для исключения элемента, false для включения его. По умолчанию: undefined.
    • withFileTypes <логическое> true если glob должен возвращать пути как Dirents, false в противном случае. По умолчанию: false.
  • callback <Функция>

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

Модули MJS

import { glob } from 'node:fs';

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

Модули CJS

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

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

fs.lchmod(path, mode, callback)

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

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

v16.0.0

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

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

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

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

v10.6.0

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

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

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

v14.5.0, v12.19.0

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

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

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

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

fs.link(existingPath, newPath, callback)

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.30

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

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

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

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

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

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

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

v13.11.0, v12.17.0

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

v10.12.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.8

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

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

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

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

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

import { mkdir } from 'node:fs';

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

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

import { mkdir } from 'node:fs';

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

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

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

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

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

v18.0.0

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

v16.5.0, v14.18.0

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

v10.0.0

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

v7.0.0

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

v6.2.1

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

v5.10.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v11.1.0

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

v9.9.0

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

v7.6.0

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

v0.0.2

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

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

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

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

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

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

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

fs.openAsBlob(path[, options])

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

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

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

Модули MJS

import { openAsBlob } from 'node:fs';

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

Модули CJS

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

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

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

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

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

v18.0.0

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

v13.1.0, v12.16.0

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

v12.12.0

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

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

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

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

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

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

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

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

v10.10.0

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

v7.4.0

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

v6.0.0

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

v0.0.2

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

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

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

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

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

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

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

Например:

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

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

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

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

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

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

v13.11.0, v12.17.0

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

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

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

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

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

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

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

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

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

v18.0.0

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

v10.10.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v6.0.0

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

v0.1.8

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

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

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

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

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

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

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

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

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

v16.0.0

Возвращаемое исключение может быть объектом AggregateError если возвращается более одного исключения.

v15.2.0, v14.17.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v5.1.0

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

v5.0.0

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

v0.1.29

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

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

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

import { readFile } from 'node:fs';

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

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

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

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

import { readFile } from 'node:fs';

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

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

import { readFile } from 'node:fs';

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

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

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

import { readFile } from 'node:fs';

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

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

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

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

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

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

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

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

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

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

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

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

v13.13.0, v12.17.0

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

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

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

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

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

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

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

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

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

v10.0.0

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

v8.0.0

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

v7.6.0

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

v7.0.0

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

v6.4.0

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

v6.0.0

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

v0.1.31

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

v9.2.0

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

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

Асинхронная функция realpath(3).

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

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

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

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

fs.rename(oldPath, newPath, callback)

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

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

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

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

import { rename } from 'node:fs';

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

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

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

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

v16.0.0

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

v16.0.0

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

v16.0.0

Опция recursive устарела; её использование вызовет предупреждение о устаревании.

v14.14.0

Опция recursive устарела; используйте fs.rm вместо неё.

v13.3.0, v12.16.0

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

v12.10.0

Опции recursive, maxBusyTries, и emfileWait теперь поддерживаются.

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

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

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

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

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

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

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

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

v14.14.0

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

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

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

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

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

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

v10.5.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

Параметр callback больше не является необязательным. Не передача его будет вызывать предупреждение об устаревании с идентификатором 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 <строка> | <Буфер> | <URL>
  • len <целое число> По умолчанию: 0
  • callback <Функция>
    • err <Ошибка> | <СуммарнаяОшибка>

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

Модули MJS

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

Модули CJS

const { truncate } = require('node:fs');
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
  if (err) throw err;
  console.log('path/file.txt was truncated');
});

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

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

fs.unlink(path, callback)

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

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

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

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

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

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

fs.unwatchFile(filename[, listener])

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

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

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

Использование fs.watch() более эффективно, чем fs.watchFile() и fs.unwatchFile(). fs.watch() следует использовать вместо fs.watchFile() и fs.unwatchFile() по возможности.

fs.utimes(path, atime, mtime, callback)

История
Версия Изменения
v18.0.0

Передача некорректного коллбэка в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v10.0.0

Параметр callback больше не является необязательным. Отсутствие этого параметра приведёт к ошибке TypeError во время выполнения.

v8.0.0

NaN, Infinity, и -Infinity больше не являются допустимыми спецификаторами времени.

v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Переданный параметр callback никогда не будет изменён.

v4.1.0

Числовые строки, NaN, и Infinity теперь являются допустимыми спецификаторами времени.

v0.4.2

Добавлена в: v0.4.2

  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>
  • callback <Функция>
    • err <Ошибка>

Изменяет временные метки файла в файловой системе объекта, на который ссылается path.

Аргументы atime и mtime следуют этим правилам:

  • Значения могут быть либо числами, представляющими время Unix в секундах, либо строками, которые представляют числа, или строковые значения в формате Date. например: '123456789.0'.
  • Если значение не может быть преобразовано в число, или является NaN, Infinity, или -Infinity, будет выброшено исключение Error.

fs.watch(filename[, options][, listener])

История
Версия Изменения
v19.1.0

Добавлена рекурсивная поддержка для Linux, AIX и IBMi.

v15.9.0, v14.17.0

Добавлена поддержка закрытия наблюдателя с помощью AbortSignal.

v7.6.0

Параметр filename может быть объектом WHATWG URL с использованием протокола file:.

v7.0.0

Переданный объект options никогда не будет изменён.

v0.5.10

Добавлена в: v0.5.10

  • filename <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • persistent <логическое значение> Указывает, должен ли процесс продолжать выполняться, пока файлы отслеживаются. По умолчанию: true.
    • recursive <логическое значение> Указывает, должны ли отслеживаться все подкаталоги или только текущий каталог. Это относится к случаям, когда указан каталог, и только на поддерживаемых платформах (см. примечания). По умолчанию: false.
    • encoding <строка> Указывает кодировку символов, которая должна использоваться для имени файла, передаваемого в обработчик. По умолчанию: 'utf8'.
    • signal <AbortSignal> позволяет завершить отслеживание с помощью AbortSignal.
  • listener <Функция> | <неопределено> По умолчанию: undefined
    • eventType <строка>
    • filename <строка> | <Буфер> | <null>
  • Возвращает: <fs.FSWatcher>

Отслеживать изменения в filename, где filename это файл или каталог.

Второй аргумент необязателен. Если options предоставлен как строка, он определяет encoding. В противном случае options должен быть передан как объект.

Обработчик события получает два аргумента (eventType, filename). eventType это либо 'rename' или 'change', а filename - имя файла, который вызвал событие.

На большинстве платформ событие 'rename' генерируется всякий раз, когда имя файла появляется или исчезает в каталоге.

Обработчик события прикреплен к событию 'change', генерируемому <fs.FSWatcher>, но это не то же самое, что значение 'change' для eventType.

Если передан signal, прерывание соответствующего AbortController закроет возвращённый <fs.FSWatcher>.

Примечания

API fs.watch не 100% совместим с различными платформами и недоступен в некоторых ситуациях.

В Windows не будут генерироваться события, если отслеживаемый каталог перемещается или переименовывается. Ошибка EPERM сообщается при удалении отслеживаемого каталога.

Доступность

Эта функция зависит от того, предоставляет ли основная операционная система способ получения уведомлений о изменениях в файловой системе.

  • В системах Linux используется inotify(7).
  • В системах BSD используется kqueue(2).
  • В macOS используется kqueue(2) для файлов и FSEvents для каталогов.
  • В системах SunOS (включая Solaris и SmartOS) используется event ports.
  • В системах Windows эта функция зависит от ReadDirectoryChangesW.
  • В системах AIX эта функция зависит от AHAFS, который должен быть включён.
  • В системах IBM i эта функция не поддерживается.

Если по каким-либо причинам основная функциональность недоступна, fs.watch() не сможет работать и может выбросить исключение. Например, отслеживание файлов или каталогов может быть ненадежным, а в некоторых случаях невозможным, на сетевых файловых системах (NFS, SMB и т. д.) или системных файловых системах при использовании программ виртуализации, таких как Vagrant или Docker.

Всё ещё можно использовать fs.watchFile(), который использует опросный метод stat, но этот метод медленнее и менее надёжен.

Иноды

В системах Linux и macOS fs.watch() преобразует путь к иноду и отслеживает его. Если отслеживаемый путь удалён и повторно создан, ему назначается новый инод. Событие о удалении будет отправлено, но наблюдение за исходным инодом будет продолжаться. События для нового инода не будут отправлены. Это ожидаемое поведение.

Файлы AIX сохраняют тот же инод на протяжении всего срока службы файла. Сохранение и закрытие отслеживаемого файла в AIX приведет к двум уведомлениям (одно для добавления нового содержимого и одно для усечения).

Аргумент имени файла

Предоставление аргумента filename в обрабатчике событий поддерживается только в Linux, macOS, Windows и AIX. Даже на поддерживаемых платформах аргумент filename не всегда гарантируется. Поэтому не предполагайте, что аргумент filename всегда будет доступен в обрабатчике и имейте некоторую логику обратной совместимости, если он null.

import { watch } from 'node:fs';
watch('somedir', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
}); copy

fs.watchFile(filename[, options], listener)

История
Версия Изменения
v10.5.0

Теперь поддерживается опция bigint.

v7.6.0

Параметр filename может быть объектом WHATWG URL используя протокол file:.

v0.1.31

Добавлен в: v0.1.31

  • filename <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <логическое значение> По умолчанию: false
    • persistent <логическое значение> По умолчанию: true
    • interval <целое число> По умолчанию: 5007
  • listener <Функция>
    • current <fs.Stats>
    • previous <fs.Stats>
  • Возвращает: <fs.StatWatcher>

Отслеживать изменения в filename. Обработчик listener будет вызываться каждый раз, когда файл будет доступен.

Аргумент options может быть опущен. Если предоставлен, он должен быть объектом. Объект options может содержать логическое значение, названное persistent, которое указывает, должен ли процесс продолжать выполняться, пока файлы отслеживаются. Объект options может содержать свойство interval, указывающее, насколько часто должна происходить проверка целевого объекта в миллисекундах.

Обработчик listener получает два аргумента: текущий объект stat и предыдущий объект stat:

import { watchFile } from 'node:fs';

watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
}); copy

Эти объекты stat являются экземплярами fs.Stat. Если опция bigint имеет значение true, числовые значения в этих объектах указываются как BigInt.

Чтобы получить уведомление о том, что файл был изменён, а не просто доступен, необходимо сравнить curr.mtimeMs и prev.mtimeMs.

Когда операция fs.watchFile приводит к ошибке ENOENT, она вызовет обработчик один раз со всеми нулевыми полями (или, для дат, с эпохой Unix). Если файл будет создан позже, обработчик будет вызван снова с последними объектами stat. Это изменение функциональности со времён v0.10.

Использование fs.watch() эффективнее, чем fs.watchFile и fs.unwatchFile. fs.watch следует использовать вместо fs.watchFile и fs.unwatchFile при возможности.

Когда файл, отслеживаемый fs.watchFile(), исчезает и вновь появляется, содержимое previous в событии второго вызова обработчика (повторное появление файла) будет таким же, как содержимое previous в событии первого вызова обработчика (его исчезновение).

Это происходит, когда:

  • файл удаляется, а затем восстанавливается
  • файл переименовывается, а затем снова переименовывается обратно в исходное имя

fs.write(fd, buffer, offset[, length[, position]], callback)

История
Версия Изменения
v18.0.0

Передача некорректного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v14.0.0

Параметр buffer больше не будет приводить неподдерживаемый ввод к строкам.

v10.10.0

Теперь параметр buffer может быть любым TypedArray или DataView.

v10.0.0

Параметр callback больше не является необязательным. Отсутствие передачи этого параметра приведёт к ошибке TypeError во время выполнения.

v7.4.0

Теперь параметр buffer может быть Uint8Array.

v7.2.0

Параметры offset и length теперь являются необязательными.

v7.0.0

Параметр callback больше не является необязательным. Отсутствие передачи этого параметра выведет предупреждение о устаревании с идентификатором DEP0013.

v0.0.2

Добавлен в: v0.0.2

  • fd <целое число>
  • buffer <Буфер> | <Массив с типом> | <Представление>
  • offset <целое число> По умолчанию: 0
  • length <целое число> По умолчанию: buffer.byteLength - offset
  • position <целое число> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • buffer <Буфер> | <Массив с типом> | <Представление>

Записать buffer в файл, указанный в fd.

offset определяет часть буфера, подлежащую записи, а length — целое число, определяющее количество байтов для записи.

position относится к смещению с начала файла, куда должны быть записаны эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

Обратный вызов получит три аргумента (err, bytesWritten, buffer), где bytesWritten указывает, сколько байтов было записано из buffer.

Если этот метод вызывается в виде его util.promisify() версии, он возвращает обещание для Object с свойствами bytesWritten и buffer.

Небезопасно использовать fs.write() несколько раз для одного и того же файла без ожидания обратного вызова. В этом случае рекомендуется использовать fs.createWriteStream().

В Linux позиционные записи не работают, когда файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда добавляет данные в конец файла.

fs.write(fd, buffer[, options], callback)

Добавлен в: v18.3.0, v16.17.0
  • fd <целое число>
  • buffer <Буфер> | <Массив с типом> | <Представление>
  • options <Объект>
    • offset <целое число> По умолчанию: 0
    • length <целое число> По умолчанию: buffer.byteLength - offset
    • position <целое число> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • buffer <Буфер> | <Массив с типом> | <Представление>

Записать buffer в файл, указанный в fd.

Аналогично вышеописанной функции fs.write, эта версия принимает необязательный объект options. Если объект options не указан, он будет иметь значения по умолчанию, как указано выше.

fs.write(fd, string[, position[, encoding]], callback)

История
Версия Изменения
v19.0.0

Передача в параметр string объекта с собственной функцией toString больше не поддерживается.

v17.8.0

Передача в параметр string объекта с собственной функцией toString устарела.

v14.12.0

Параметр string будет преобразовывать объект с явной функцией toString в строку.

v14.0.0

Параметр string больше не будет приводить неподдерживаемый ввод к строкам.

v10.0.0

Параметр callback больше не является необязательным. Отсутствие передачи этого параметра приведёт к ошибке TypeError во время выполнения.

v7.2.0

Параметр position теперь необязателен.

v7.0.0

Параметр callback больше не является необязательным. Отсутствие передачи этого параметра выведет предупреждение о устаревании с идентификатором DEP0013.

v0.11.5

Добавлен в: v0.11.5

  • fd <целое число>
  • string <строка>
  • position <целое число> | <null> По умолчанию: null
  • encoding <строка> По умолчанию: 'utf8'
  • callback <Функция>
    • err <Ошибка>
    • written <целое число>
    • string <строка>

Записать string в файл, указанный в fd. Если string не является строкой, вызывается исключение.

position относится к смещению с начала файла, куда должны быть записаны эти данные. Если typeof position !== 'number', данные будут записаны в текущую позицию. См. pwrite(2).

encoding — ожидаемая кодировка строки.

Обратный вызов получит аргументы (err, written, string), где written указывает, сколько байтов потребовалось для записи переданной строки. Записанные байты не обязательно совпадают с записанными символами строки. См. Buffer.byteLength.

Небезопасно использовать fs.write() несколько раз для одного и того же файла без ожидания обратного вызова. В этом случае рекомендуется использовать fs.createWriteStream().

В Linux позиционные записи не работают, когда файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда добавляет данные в конец файла.

В Windows, если дескриптор файла подключён к консоли (например, fd == 1 или stdout) строка, содержащая символы, не являющиеся ASCII, не будет отображаться должным образом по умолчанию, независимо от используемой кодировки. Можно настроить консоль для правильного отображения UTF-8, изменив активную кодовую страницу с помощью команды chcp 65001. Подробности см. в документации к chcp.

fs.writeFile(file, data[, options], callback)

История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v19.0.0

Передача в параметр string объекта с собственной функцией toString больше не поддерживается.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE, а не ERR_INVALID_CALLBACK.

v17.8.0

Передача в параметр string объекта с собственной функцией toString устарела.

v16.0.0

Возвращаемая ошибка может быть AggregateError, если возвращается несколько ошибок.

v15.2.0, v14.17.0

В аргумент options можно добавить AbortSignal для прерывания текущего запроса writeFile.

v14.12.0

Параметр data будет преобразовывать объект с явной функцией toString в строку.

v14.0.0

Параметр data больше не будет приводить неподдерживаемые входные данные к строкам.

v10.10.0

Параметр data теперь может быть любым TypedArray или DataView.

v10.0.0

Параметр callback больше не является необязательным. Отсутствие параметра приведёт к ошибке TypeError во время выполнения.

v7.4.0

Параметр data теперь может быть Uint8Array.

v7.0.0

Параметр callback больше не является необязательным. Отсутствие параметра вызовет предупреждение об устаревании с идентификатором DEP0013.

v5.0.0

Параметр file теперь может быть дескриптором файла.

v0.1.29

Добавлен в: v0.1.29

  • file <строка> | <Буфер> | <URL> | <целое> имя файла или дескриптор файла
  • data <строка> | <Буфер> | <TypedArray> | <DataView>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> См. поддержку системных флагов flags. По умолчанию: 'w'.
    • flush <логическое> Если все данные успешно записаны в файл, и flush равно true, то используется fs.fsync() для записи данных. По умолчанию: false.
    • signal <AbortSignal> позволяет прервать текущую запись файла
  • callback <Функция>
    • err <Ошибка> | <Сводная ошибка>

Когда file — имя файла, асинхронно записывает данные в файл, перезаписывая файл, если он уже существует. data может быть строкой или буфером.

Когда file — дескриптор файла, поведение аналогично прямому вызову fs.write() (что рекомендуется). См. примечания ниже об использовании дескриптора файла.

Параметр encoding игнорируется, если data является буфером.

Параметр mode влияет только на вновь созданный файл. См. fs.open() для получения дополнительных сведений.

import { writeFile } from 'node:fs';
import { Buffer } from 'node:buffer';

const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
}); copy

Если options — строка, она указывает кодировку:

import { writeFile } from 'node:fs';

writeFile('message.txt', 'Hello Node.js', 'utf8', callback); copy

Небезопасно использовать fs.writeFile() несколько раз для одного файла без ожидания обратного вызова. В этом случае рекомендуется использовать fs.createWriteStream().

Аналогично fs.readFile - fs.writeFile - это удобный метод, который выполняет несколько вызовов write внутри для записи переданного в него буфера. Для производительности в чувствительных к производительности случаях рекомендуется использовать fs.createWriteStream().

Можно использовать <AbortSignal> для отмены fs.writeFile(). Отмена выполняется с наилучшим результатом, и некоторое количество данных, вероятно, всё ещё будет записано.

import { writeFile } from 'node:fs';
import { Buffer } from 'node:buffer';

const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
  // When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort(); copy

Отмена текущего запроса не отменяет отдельные запросы операционной системы, а скорее внутренний буферизованный fs.writeFile.

Использование fs.writeFile() с дескрипторами файлов

Когда file — дескриптор файла, поведение почти идентично прямому вызову fs.write():

import { write } from 'node:fs';
import { Buffer } from 'node:buffer';

write(fd, Buffer.from(data, options.encoding), callback); copy

Разница с прямым вызовом fs.write() заключается в том, что в некоторых необычных условиях fs.write() может записать только часть буфера и потребовать повторной попытки для записи оставшихся данных, в то время как fs.writeFile() повторяет попытки до тех пор, пока данные не будут полностью записаны (или не произойдёт ошибка).

Эти последствия часто приводят к путанице. В случае с дескриптором файла файл не заменяется! Данные не обязательно записываются в начало файла, и исходные данные файла могут оставаться до и/или после новых данных.

Например, если fs.writeFile() вызывается дважды подряд, сначала для записи строки 'Hello', а затем для записи строки ', World', файл будет содержать 'Hello, World', и, возможно, некоторые исходные данные файла (в зависимости от размера исходного файла и позиции дескриптора файла). Если вместо дескриптора использовалось бы имя файла, файл гарантированно содержал бы только ', World'.

fs.writev(fd, buffers[, position], callback)

История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v12.9.0

Добавлен в: v12.9.0

  • fd <целое>
  • buffers <ArrayBufferView[]>
  • position <целое> | <null> По умолчанию: null
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое>
    • buffers <ArrayBufferView[]>

Записывает массив ArrayBufferView в файл, указанный по fd используя writev().

position — это смещение от начала файла, куда должны быть записаны эти данные. Если typeof position !== 'number', данные будут записаны в текущей позиции.

Обратный вызов получит три аргумента: err, bytesWritten, и buffers.

bytesWritten — это количество байтов, записанных из buffers.

Если этот метод util.promisify(), он возвращает промис для Object с свойствами bytesWritten и buffers.

Небезопасно использовать fs.writev() несколько раз на одном файле без ожидания вызова обратного вызова. Для этого случая используйте fs.createWriteStream().

В Linux позиционные записи не работают, когда файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда добавляет данные в конец файла.

Синхронный API

Синхронные API выполняют все операции синхронно, блокируя цикл событий до завершения или сбоя операции.

fs.accessSync(path[, mode])

История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v0.11.15

Добавлен в: v0.11.15

  • path <строка> | <Буфер> | <URL>
  • mode <целое число> По умолчанию: fs.constants.F_OK

Синхронно проверяет разрешения пользователя для файла или каталога, указанного в path. Аргумент mode — необязательное целое число, определяющее проверяемые проверки доступности. mode должно быть либо значением fs.constants.F_OK, либо маской, состоящей из побитового ИЛИ любого из fs.constants.R_OK, fs.constants.W_OK, и fs.constants.X_OK (например, fs.constants.W_OK | fs.constants.R_OK). Возможные значения mode см. в разделе Постоянные значения доступа к файлам.

Если какая-либо из проверок доступности завершится неудачей, будет брошено исключение Error. В противном случае метод вернёт undefined.

import { accessSync, constants } from 'node:fs';

try {
  accessSync('etc/passwd', constants.R_OK | constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
} copy

fs.appendFileSync(path, data[, options])

История
Версия Изменения
v21.1.0, v20.10.0

Теперь поддерживается параметр flush.

v7.0.0

Передаваемый объект options никогда не будет изменён.

v5.0.0

Теперь параметр file может быть дескриптором файла.

v0.6.7

Добавлен в: v0.6.7

  • path <строка> | <Буфер> | <URL> | <число> имя файла или дескриптор файла
  • data <строка> | <Буфер>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое число> По умолчанию: 0o666
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'a'.
    • flush <логическое значение> Если true, дескриптор подлежащего файла будет сброшен перед его закрытием. По умолчанию: false.

Синхронно добавляет данные в файл, создавая его, если он ещё не существует. data может быть строкой или <Буфером>.

Параметр 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 <строка> | <Буфер> | <URL>
  • mode <строка> | <целое число>

Подробную информацию см. в документации асинхронной версии этого API: fs.chmod().

Для получения более подробной информации см. документацию POSIX chmod(2).

fs.chownSync(path, uid, gid)

История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v0.1.97

Добавлен в: v0.1.97

  • path <строка> | <Буфер> | <URL>
  • uid <целое число>
  • gid <целое число>

Синхронно изменяет владельца и группу файла. Возвращает undefined. Это синхронная версия fs.chown().

Для получения более подробной информации см. документацию POSIX chown(2).

fs.closeSync(fd)

Добавлен в: v0.1.21
  • fd <целое число>

Закрывает дескриптор файла. Возвращает undefined.

Вызов fs.closeSync() для любого дескриптора файла (fd) , который в данный момент используется в рамках другой операции fs, может привести к неопределённому поведению.

Для получения более подробной информации см. документацию POSIX close(2).

fs.copyFileSync(src, dest[, mode])

История
Версия Изменения
v14.0.0

Изменён параметр flags на mode и введена более строгая проверка типов.

v8.5.0

Добавлен в: v8.5.0

  • src <строка> | <Буфер> | <URL> исходное имя файла для копирования
  • dest <строка> | <Буфер> | <URL> имя файла назначения для операции копирования
  • mode <целое число> модификаторы для операции копирования. По умолчанию: 0.

Синхронно копирует src в dest. По умолчанию, dest перезаписывается, если он уже существует. Возвращает undefined. Node.js не гарантирует атомарность операции копирования. Если ошибка возникает после того, как файл назначения был открыт для записи, Node.js попытается удалить файл назначения.

mode — необязательное целое число, определяющее поведение операции копирования. Возможно создание маски путём побитового ИЛИ двух или более значений (например, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE).

  • fs.constants.COPYFILE_EXCL: Операция копирования завершится неудачей, если dest уже существует.
  • fs.constants.COPYFILE_FICLONE: Операция копирования попытается создать ссылку copy-on-write. Если платформа не поддерживает copy-on-write, используется резервный механизм копирования.
  • fs.constants.COPYFILE_FICLONE_FORCE: Операция копирования попытается создать ссылку copy-on-write. Если платформа не поддерживает copy-on-write, операция завершится неудачей.
import { copyFileSync, constants } from 'node:fs';

// destination.txt will be created or overwritten by default.
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');

// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL); copy

fs.cpSync(src, dest[, options])

История
Версия Изменения
v22.3.0

Данный API больше не является экспериментальным.

v20.1.0, v18.17.0

Принимает дополнительный mode параметр для указания поведения копирования в качестве аргумента mode функции fs.copyFile().

v17.6.0, v16.15.0

Принимает дополнительный verbatimSymlinks параметр для указания, следует ли выполнять разрешение пути для символьных ссылок.

v16.7.0

Добавлен в: v16.7.0

  • src <строка> | <URL> исходный путь для копирования.
  • dest <строка> | <URL> целевой путь для копирования.
  • options <Объект>
    • dereference <логическое> разрешать символьные ссылки. По умолчанию: false.
    • errorOnExist <логическое> если force равно false, а целевой объект существует, выбросить ошибку. По умолчанию: false.
    • filter <Функция> Функция для фильтрации копируемых файлов/каталогов. Возвращает true для копирования элемента, false для игнорирования. При игнорировании каталога все его содержимое также будет пропущено. По умолчанию: undefined
      • src <строка> исходный путь для копирования.
      • dest <строка> целевой путь для копирования.
      • Возвращает: <логическое>
    • force <логическое> перезаписать существующий файл или каталог. Операция копирования пропустит ошибки, если вы установите это значение в false, а целевой объект существует. Используйте параметр errorOnExist для изменения этого поведения. По умолчанию: true.
    • mode <целое> модификаторы для операции копирования. По умолчанию: 0. См. флаг mode в fs.copyFileSync().
    • preserveTimestamps <логическое> При true временные метки из src будут сохранены. По умолчанию: false.
    • recursive <логическое> копировать каталоги рекурсивно. По умолчанию: false
    • verbatimSymlinks <логическое> При true, разрешение пути для символьных ссылок будет пропущено. По умолчанию: false

Синхронно копирует всю структуру каталога из src в dest, включая подкаталоги и файлы.

При копировании каталога в другой каталог шаблоны (globs) не поддерживаются, и поведение аналогично cp dir1/ dir2/.

fs.existsSync(path)

История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • Возвращает: <логическое>

Возвращает true если путь существует, false в противном случае.

Для подробной информации см. документацию асинхронной версии данного API: fs.exists().

fs.exists() устарел, но fs.existsSync() нет. Параметр callback для fs.exists() принимает параметры, несовместимые с другими обратными вызовами Node.js. fs.existsSync() не использует обратный вызов.

import { existsSync } from 'node:fs';

if (existsSync('/etc/passwd'))
  console.log('The path exists.'); copy

fs.fchmodSync(fd, mode)

Добавлен в: v0.4.7
  • fd <целое>
  • mode <строка> | <целое>

Устанавливает разрешения на файл. Возвращает undefined.

См. документацию POSIX fchmod(2) для более подробной информации.

fs.fchownSync(fd, uid, gid)

Добавлен в: v0.4.7
  • fd <целое>
  • uid <целое> Новый идентификатор пользователя владельца файла.
  • gid <целое> Новый идентификатор группы группы файла.

Устанавливает владельца файла. Возвращает undefined.

См. документацию POSIX fchown(2) для более подробной информации.

fs.fdatasyncSync(fd)

Добавлен в: v0.1.96
  • fd <целое>

Принудительно приводит все текущие запланированные операции ввода/вывода, связанные с файлом, к синхронизированному состоянию завершения операции ввода/вывода операционной системы. Обратитесь к документации POSIX fdatasync(2) для получения подробной информации. Возвращает undefined.

fs.fstatSync(fd[, options])

История
Версия Изменения
v10.5.0

Принимает дополнительный options объект для указания, должны ли возвращаемые числовые значения быть типа bigint.

v0.1.95

Добавлен в: v0.1.95

  • fd <целое>
  • options <Объект>
    • bigint <логическое> Указывает, должны ли числовые значения в возвращаемом объекте <fs.Stats> быть типа bigint. По умолчанию: false.
  • Возвращает: <fs.Stats>

Возвращает <fs.Stats> для дескриптора файла.

См. документацию POSIX fstat(2) для более подробной информации.

fs.fsyncSync(fd)

Добавлен в: v0.1.96
  • fd <целое>

Запрашивает, чтобы все данные для открытого дескриптора файла были записаны на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Обратитесь к документации POSIX fsync(2) для более подробной информации. Возвращает undefined.

fs.ftruncateSync(fd[, len])

Добавлен в: v0.8.6
  • fd <целое>
  • len <целое> По умолчанию: 0

Усекает дескриптор файла. Возвращает undefined.

Для подробной информации см. документацию асинхронной версии данного API: fs.ftruncate().

fs.futimesSync(fd, atime, mtime)

История
Версия Изменения
v4.1.0

Теперь разрешены числовые строки, NaN, и Infinity в качестве спецификаторов времени.

v0.4.2

Добавлен в: v0.4.2

  • fd <целое>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

Синхронный вариант fs.futimes(). Возвращает undefined.

fs.globSync(pattern[, options])

История
Версия Изменения
v22.2.0

Добавлена поддержка withFileTypes в качестве параметра.

v22.0.0

Добавлен в: v22.0.0

Уровень стабильности: 1 - Экспериментальный
  • pattern <строка> | <массив строк>
  • options <Объект>
    • cwd <строка> текущая рабочая директория. По умолчанию: process.cwd()
    • exclude <Функция> Функция для фильтра файлов/директорий. Возвращает true для исключения элемента, false для включения. По умолчанию: undefined.
    • withFileTypes <логическое значение> true возвращать пути в виде Dirents, false в противном случае. По умолчанию: false.
  • Возвращает: <массив строк> пути к файлам, соответствующим шаблону.

MJS модули

import { globSync } from 'node:fs';

console.log(globSync('**/*.js'));

CJS модули

const { globSync } = require('node:fs');

console.log(globSync('**/*.js'));

fs.lchmodSync(path, mode)

Устаревшая с версии: v0.4.7
  • path <строка> | <Буфер> | <URL>
  • mode <целое>

Изменяет разрешения символической ссылки. Возвращает undefined.

Этот метод реализован только на macOS.

См. POSIX lchmod(2) для получения более подробной информации.

fs.lchownSync(path, uid, gid)

История
Версия Изменения
v10.6.0

Данный API больше не устарел.

v0.4.7

Устарел только в документации.

  • path <строка> | <Буфер> | <URL>
  • uid <целое> Новый идентификатор пользователя владельца файла.
  • gid <целое> Новый идентификатор группы владельца файла.

Устанавливает владельца пути. Возвращает undefined.

См. POSIX lchown(2) для получения более подробной информации.

fs.lutimesSync(path, atime, mtime)

Добавлен в: v14.5.0, v12.19.0
  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

Изменяет системные метки времени символической ссылки, на которую ссылается path. Возвращает undefined, или выбрасывает исключение при неверных параметрах или неудачном выполнении операции. Это синхронный вариант fs.lutimes().

fs.linkSync(existingPath, newPath)

История
Версия Изменения
v7.6.0

Параметры existingPath и newPath могут быть объектами WHATWG URL используя протокол file:. Поддержка пока что экспериментальная.

v0.1.31

Добавлен в: v0.1.31

  • existingPath <строка> | <Буфер> | <URL>
  • newPath <строка> | <Буфер> | <URL>

Создаёт новую ссылку от existingPath к newPath. См. POSIX link(2) для более подробной информации. Возвращает undefined.

fs.lstatSync(path[, options])

История
Версия Изменения
v15.3.0, v14.17.0

Принимает параметр throwIfNoEntry для указания, следует ли выбрасывать исключение, если записи нет.

v10.5.0

Принимает дополнительный объект options для указания, должны ли возвращаемые числовые значения быть bigint.

v7.6.0

Параметр path может быть объектом WHATWG URL используя протокол file:.

v0.1.30

Добавлен в: v0.1.30

  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <логическое значение> Числовые значения в возвращаемом объекте <fs.Stats> должны быть bigint. По умолчанию: false.
    • throwIfNoEntry <логическое значение> Если записи нет, следует ли выбрасывать исключение, вместо возврата undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для символической ссылки по path.

См. POSIX lstat(2) для получения более подробной информации.

fs.mkdirSync(path[, options])

История
Версия Изменения
v13.11.0, v12.17.0

В режиме recursive, теперь возвращается первый созданный путь.

v10.12.0

Второй аргумент теперь может быть объектом options с свойствами recursive и mode.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • options <Объект> | <целое число>
    • recursive <булево> По умолчанию: false
    • mode <строка> | <целое число> Не поддерживается в Windows. По умолчанию: 0o777.
  • Возвращает: <строка> | <неопределено>

Синхронно создает директорию. Возвращает undefined, или если recursive равно true, путь к первой созданной директории. Это синхронная версия fs.mkdir().

Для более подробной информации см. документацию POSIX mkdir(2).

fs.mkdtempSync(prefix[, options])

История
Версия Изменения
v20.6.0, v18.19.0

Параметр prefix теперь принимает буферы и URL.

v16.5.0, v14.18.0

Параметр prefix теперь принимает пустую строку.

v5.10.0

Добавлен в: v5.10.0

  • prefix <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка>

Возвращает путь созданной директории.

Для подробной информации см. документацию асинхронной версии этого API: fs.mkdtemp().

Необязательный аргумент options может быть строкой, определяющей кодировку, или объектом со свойством encoding, определяющим используемую кодировку символов.

fs.opendirSync(path[, options])

История
Версия Изменения
v20.1.0, v18.17.0

Добавлен параметр recursive.

v13.1.0, v12.16.0

Был введен параметр bufferSize.

v12.12.0

Добавлен в: v12.12.0

  • path <строка> | <Буфер> | <URL>
  • options <Объект>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • bufferSize <число> Количество записей каталога, которые буферизуются внутри при чтении из каталога. Более высокие значения приводят к лучшей производительности, но также к большему использованию памяти. По умолчанию: 32
    • recursive <булево> По умолчанию: false
  • Возвращает: <fs.Dir>

Синхронно открывает каталог. См. opendir(3).

Создает <fs.Dir>, который содержит все последующие функции для чтения из каталога и очистки.

Параметр encoding устанавливает кодировку для path при открытии каталога и последующих операциях чтения.

fs.openSync(path[, flags[, mode]])

История
Версия Изменения
v11.1.0

Аргумент flags теперь является необязательным и по умолчанию равен 'r'.

v9.9.0

Теперь поддерживаются флаги as и as+.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • flags <строка> | <число> По умолчанию: 'r'. См. поддержку флагов файловой системы flags.
  • mode <строка> | <целое число> По умолчанию: 0o666
  • Возвращает: <число>

Возвращает целое число, представляющее дескриптор файла.

Для подробной информации см. документацию асинхронной версии этого API: fs.open().

fs.readdirSync(path[, options])

История
Версия Изменения
v20.1.0, v18.17.0

Добавлен параметр recursive.

v10.10.0

Добавлен новый параметр withFileTypes.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <булево> По умолчанию: false
    • recursive <булево> Если true, читает содержимое каталога рекурсивно. В рекурсивном режиме он будет перечислять все файлы, подкаталоги и директории. По умолчанию: false.
  • Возвращает: <массив строк> | <массив буферов> | <fs.Dirent[]>

Читает содержимое каталога.

Для более подробной информации см. документацию POSIX readdir(3).

Необязательный аргумент options может быть строкой, определяющей кодировку, или объектом с свойством encoding, определяющим кодировку символов для использования в именах файлов, возвращаемых функцией. Если encoding установлено в 'buffer', возвращаемые имена файлов будут передаваться как объекты <Buffer>.

Если options.withFileTypes установлено в true, результат будет содержать объекты <fs.Dirent>.

fs.readFileSync(path[, options])

История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v5.0.0

Теперь параметр path может быть дескриптором файла.

v0.1.8

Добавлена в: v0.1.8

  • path <строка> | <Буфер> | <URL> | <целое> имя файла или дескриптор файла
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: null
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'r'.
  • Возвращает: <строка> | <Буфер>

Возвращает содержимое 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 <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка> | <Буфер>

Возвращает строковое значение символической ссылки.

См. документацию POSIX readlink(2) для получения дополнительной информации.

Необязательный аргумент options может быть строкой, определяющей кодировку, или объектом с свойством encoding, определяющим кодировку символов для возвращаемого пути ссылки. Если encoding установлено в 'buffer', возвращаемый путь ссылки будет передаваться как объект <Buffer> object.

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 <целое>
  • buffer <Буфер> | <Массив с типом> | <DataView>
  • offset <целое>
  • length <целое>
  • position <целое> | <bigint> | <null> По умолчанию: null
  • Возвращает: <число>

Возвращает количество bytesRead.

Для подробной информации см. документацию асинхронной версии этого API: fs.read().

fs.readSync(fd, buffer[, options])

История
Версия Изменения
v13.13.0, v12.17.0

Объект параметров может быть передан, чтобы сделать смещение, длину и позицию необязательными.

v13.13.0, v12.17.0

Добавлена в: v13.13.0, v12.17.0

  • fd <целое>
  • buffer <Буфер> | <Массив с типом> | <DataView>
  • options <Объект>
    • offset <целое> По умолчанию: 0
    • length <целое> По умолчанию: buffer.byteLength - offset
    • position <целое> | <bigint> | <null> По умолчанию: null
  • Возвращает: <число>

Возвращает количество bytesRead.

Аналогично функции fs.readSync выше, эта версия принимает необязательный объект options. Если объект options не указан, он будет использовать значения по умолчанию.

Для подробной информации см. документацию асинхронной версии этого API: fs.read().

fs.readvSync(fd, buffers[, position])

Добавлена в: v13.13.0, v12.17.0
  • fd <целое>
  • buffers <ArrayBufferView[]>
  • position <целое> | <null> По умолчанию: null
  • Возвращает: <число> Количество прочитанных байт.

Для подробной информации см. документацию асинхронной версии этого API: fs.readv().

fs.realpathSync(path[, options])

История
Версия Изменения
v8.0.0

Была добавлена поддержка разрешения Pipe/Socket.

v7.6.0

Параметр path может быть объектом WHATWG URL, использующим протокол file:.

v6.4.0

Вызов realpathSync теперь работает снова для различных крайних случаев в Windows.

v6.0.0

Параметр cache был удален.

v0.1.31

Добавлен в: v0.1.31

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка> | <Буфер>

Возвращает разрешенное имя пути.

Для получения подробной информации, см. документацию асинхронной версии этого API: fs.realpath().

fs.realpathSync.native(path[, options])

Добавлен в: v9.2.0
  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка> | <Буфер>

Синхронная функция realpath(3).

Поддерживаются только пути, которые могут быть преобразованы в строки UTF8.

Необязательный параметр options может быть строкой, задающей кодировку, или объектом с свойством encoding, задающим используемую кодировку символов для возвращаемого пути. Если encoding установлено в значение '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 <строка> | <Буфер> | <URL>
  • newPath <строка> | <Буфер> | <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 <строка> | <Буфер> | <URL>
  • options <Объект>
    • maxRetries <целое число> Если встречаются ошибки EBUSY, EMFILE, ENFILE, ENOTEMPTY, или EPERM, Node.js повторно пытается выполнить операцию с линейным отложенным ожиданием на retryDelay миллисекунд больше на каждой попытке. Этот параметр представляет количество повторов. Этот параметр игнорируется, если параметр recursive не true. По умолчанию: 0.
    • recursive <логическое значение> Если true, выполнить рекурсивное удаление каталога. В рекурсивном режиме операции повторно выполняются при ошибке. По умолчанию: false. Устарело.
    • retryDelay <целое число> Количество миллисекунд, которые нужно ждать между повторными попытками. Этот параметр игнорируется, если параметр recursive не true. По умолчанию: 100.

Синхронная функция rmdir(2). Возвращает undefined.

Использование fs.rmdirSync() на файле (а не каталоге) приводит к ошибке ENOENT в Windows и ошибке ENOTDIR в POSIX.

Чтобы получить поведение, аналогичное команде Unix rm -rf, используйте fs.rmSync() с параметрами { recursive: true, force: true }.

fs.rmSync(path[, options])

История
Версия Изменения
v17.3.0, v16.14.0

Параметр path может быть объектом WHATWG URL с использованием протокола file:.

v14.14.0

Добавлен в: v14.14.0

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • force <boolean> Когда true, исключения будут игнорироваться, если path не существует. По умолчанию: false.
    • maxRetries <integer> Если произошла ошибка EBUSY, EMFILE, ENFILE, ENOTEMPTY, или EPERM, Node.js повторит операцию с линейной задержкой увеличенной на retryDelay миллисекунд на каждой попытке. Этот параметр задаёт количество повторов. Параметр игнорируется, если параметр recursive не true. По умолчанию: 0.
    • recursive <boolean> Если true, выполняется рекурсивное удаление каталога. В рекурсивном режиме операции повторяются при ошибке. По умолчанию: false.
    • retryDelay <integer> Время ожидания между повторами в миллисекундах. Параметр игнорируется, если параметр recursive не true. По умолчанию: 100.

Синхронно удаляет файлы и каталоги (моделируется по стандартной утилите POSIX rm). Возвращает undefined.

fs.statSync(path[, options])

История
Версия Изменения
v15.3.0, v14.17.0

Принимает параметр throwIfNoEntry для указания, должно ли выбрасываться исключение, если запись не существует.

v10.5.0

Принимает дополнительный объект options для указания, должны ли числовые значения, возвращаемые значение, быть bigint.

v7.6.0

Параметр path может быть объектом WHATWG URL используя протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Числовые значения в возвращаемом объекте <fs.Stats> должны быть bigint. По умолчанию: false.
    • throwIfNoEntry <boolean> Выбрасывать исключение, если запись в файловой системе не найдена, вместо возвращения undefined. По умолчанию: true.
  • Возвращает: <fs.Stats>

Возвращает <fs.Stats> для заданного пути.

fs.statfsSync(path[, options])

Добавлен в: v19.6.0, v18.15.0
  • path <string> | <Buffer> | <URL>
  • options <Object>
    • bigint <boolean> Числовые значения в возвращаемом объекте <fs.StatFs> должны быть bigint. По умолчанию: false.
  • Возвращает: <fs.StatFs>

Синхронная функция statfs(2). Возвращает информацию о смонтированной файловой системе, содержащей path.

В случае ошибки, err.code будет одним из Общих системных ошибок.

fs.symlinkSync(target, path[, type])

История
Версия Изменения
v12.0.0

Если параметр type опущен, Node автоматически определит тип target и выберет dir или file.

v7.6.0

Параметры target и path могут быть объектами WHATWG URL используя протокол file:. Поддержка на данный момент всё ещё экспериментальная.

v0.1.31

Добавлен в: v0.1.31

  • target <string> | <Buffer> | <URL>
  • path <string> | <Buffer> | <URL>
  • type <string> | <null> По умолчанию: null

Возвращает undefined.

Для подробной информации, смотрите документацию асинхронной версии этого API: fs.symlink().

fs.truncateSync(path[, len])

Добавлен в: v0.8.6
  • path <string> | <Buffer> | <URL>
  • len <integer> По умолчанию: 0

Усекает файл. Возвращает undefined. Также можно передать дескриптор файла в качестве первого аргумента. В этом случае вызывается fs.ftruncateSync().

Передача дескриптора файла устарела и может привести к ошибке в будущем.

fs.unlinkSync(path)

История
Версия Изменения
v7.6.0

Параметр path может быть объектом WHATWG URL используя протокол file:.

v0.1.21

Добавлен в: v0.1.21

  • path <string> | <Buffer> | <URL>

Синхронная функция unlink(2). Возвращает undefined.

fs.utimesSync(path, atime, mtime)

История
Версия Изменения
v8.0.0

NaN, Infinity, и -Infinity больше не являются допустимыми форматами времени.

v7.6.0

Параметр path может быть объектом WHATWG URL используя протокол file:.

v4.1.0

Теперь допустимыми являются числовые строки, NaN, и Infinity в качестве форматов времени.

v0.4.2

Добавлен в: v0.4.2

  • path <string> | <Buffer> | <URL>
  • atime <number> | <string> | <Date>
  • mtime <number> | <string> | <Date>

Возвращает undefined.

Для получения подробной информации см. документацию асинхронной версии этого API: fs.utimes().

fs.writeFileSync(file, data[, options])

История
Версия Изменения
v21.0.0, v20.10.0

Теперь поддерживается параметр flush.

v19.0.0

Передача в параметр data объекта с собственным методом toString больше не поддерживается.

v17.8.0

Передача в параметр data объекта с собственным методом toString устарела.

v14.12.0

Параметр data теперь преобразует объект с явным методом toString в строку.

v14.0.0

Параметр data больше не будет приводить неподдерживаемый ввод к строкам.

v10.10.0

Теперь параметр data может быть любым TypedArray или DataView.

v7.4.0

Теперь параметр data может быть Uint8Array.

v5.0.0

Теперь параметр file может быть дескриптором файла.

v0.1.29

Добавлен в: v0.1.29

  • file <строка> | <Буфер> | <URL> | <целое> имя файла или дескриптор файла
  • data <строка> | <Буфер> | <TypedArray> | <DataView>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'w'.
    • flush <логическое> Если все данные успешно записаны в файл, и flush имеет значение true, используется fs.fsyncSync() для сброса данных.

Возвращает undefined.

Параметр mode влияет только на вновь созданный файл. Подробнее см. fs.open().

Для получения подробной информации см. документацию асинхронной версии этого API: fs.writeFile().

fs.writeSync(fd, buffer, offset[, length[, position]])

История
Версия Изменения
v14.0.0

Параметр buffer больше не будет приводить неподдерживаемый ввод к строкам.

v10.10.0

Теперь параметр buffer может быть любым TypedArray или DataView.

v7.4.0

Теперь параметр buffer может быть Uint8Array.

v7.2.0

Параметры offset и length стали необязательными.

v0.1.21

Добавлен в: v0.1.21

  • fd <целое>
  • buffer <Буфер> | <TypedArray> | <DataView>
  • offset <целое> По умолчанию: 0
  • length <целое> По умолчанию: buffer.byteLength - offset
  • position <целое> | <null> По умолчанию: null
  • Возвращает: <число> Количество записанных байт.

Для получения подробной информации см. документацию асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, buffer[, options])

Добавлен в: v18.3.0, v16.17.0
  • fd <целое>
  • buffer <Буфер> | <TypedArray> | <DataView>
  • options <Объект>
    • offset <целое> По умолчанию: 0
    • length <целое> По умолчанию: buffer.byteLength - offset
    • position <целое> По умолчанию: null
  • Возвращает: <число> Количество записанных байт.

Для получения подробной информации см. документацию асинхронной версии этого API: fs.write(fd, buffer...).

fs.writeSync(fd, string[, position[, encoding]])

История
Версия Изменения
v14.0.0

Параметр string больше не будет приводить неподдерживаемый ввод к строкам.

v7.2.0

Параметр position стал необязательным.

v0.11.5

Добавлен в: v0.11.5

  • fd <целое>
  • string <строка>
  • position <целое> | <null> По умолчанию: null
  • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <число> Количество записанных байт.

Для получения подробной информации см. документацию асинхронной версии этого API: fs.write(fd, string...).

fs.writevSync(fd, buffers[, position])

Добавлен в: v12.9.0
  • fd <целое>
  • buffers <ArrayBufferView[]>
  • position <целое> | <null> По умолчанию: null
  • Возвращает: <число> Количество записанных байт.

Для получения подробной информации, обратитесь к документации асинхронной версии этого API: fs.writev().

Общие объекты

Общие объекты используются во всех вариантах API файловой системы (обещание, обратный вызов и синхронный).

Класс: fs.Dir

Добавлен в: v12.12.0

Класс, представляющий поток каталога.

Создаётся с помощью fs.opendir(), fs.opendirSync() или fsPromises.opendir().

import { opendir } from 'node:fs/promises';

try {
  const dir = await opendir('./');
  for await (const dirent of dir)
    console.log(dirent.name);
} catch (err) {
  console.error(err);
} copy

При использовании асинхронного итератора объект <fs.Dir> будет автоматически закрыт после выхода итератора.

dir.close()
Добавлен в: v12.12.0
  • Возвращает: <Promise>

Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.

Возвращается обещание, которое будет выполнено после закрытия ресурса.

dir.close(callback)
История
Версия Изменения
v18.0.0

Передача невалидного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v12.12.0

Добавлен в: v12.12.0

  • callback <Функция>
    • err <Ошибка>

Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.

Функция callback будет вызвана после закрытия дескриптора ресурса.

dir.closeSync()
Добавлен в: v12.12.0

Синхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.

dir.path
Добавлен в: v12.12.0
  • <строка>

Только для чтения путь к этому каталогу, как он был предоставлен в fs.opendir(), fs.opendirSync() или fsPromises.opendir().

dir.read()
Добавлен в: v12.12.0
  • Возвращает: <Promise> Выполняется с <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога с помощью readdir(3) как <fs.Dirent>.

Возвращается обещание, которое будет выполнено с <fs.Dirent> или null если больше нет записей каталога для чтения.

Записи каталога, возвращаемые этой функцией, не упорядочены, как предоставляет подсистема каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут отсутствовать в результатах итерации.

dir.read(callback)
Добавлен в: v12.12.0
  • callback <Функция>
    • err <Ошибка>
    • dirent <fs.Dirent> | <null>

Асинхронно считывает следующую запись каталога с помощью readdir(3) как <fs.Dirent>.

После завершения чтения callback будет вызвана с <fs.Dirent> или null если больше нет записей каталога для чтения.

Записи каталога, возвращаемые этой функцией, не упорядочены, как предоставляет подсистема каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут отсутствовать в результатах итерации.

dir.readSync()
Добавлен в: v12.12.0
  • Возвращает: <fs.Dirent> | <null>

Синхронно считывает следующую запись каталога как <fs.Dirent>. См. документацию POSIX readdir(3) для получения дополнительной информации.

Если больше нет записей каталога для чтения, возвращается null.

Записи каталога, возвращаемые этой функцией, не упорядочены, как предоставляет подсистема каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут отсутствовать в результатах итерации.

dir[Symbol.asyncIterator]()
Добавлен в: v12.12.0
  • Возвращает: <Асинхронный итератор> Асинхронный итератор <fs.Dirent>

Асинхронно итерируется по каталогу до тех пор, пока не будут считаны все записи. См. документацию POSIX readdir(3) для получения дополнительной информации.

Записи, возвращаемые асинхронным итератором, всегда являются <fs.Dirent>. Случай null из dir.read() обрабатывается внутренне.

См. <fs.Dir> для примера.

Записи каталога, возвращаемые этим итератором, не упорядочены, как предоставляет подсистема каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут отсутствовать в результатах итерации.

Класс: fs.Dirent

Добавлен в: v10.10.0

Представление записи каталога, которая может быть файлом или подкаталогом внутри каталога, возвращаемым при чтении из <fs.Dir>. Запись каталога — это комбинация имени файла и пар типа файла.

Кроме того, когда fs.readdir() или fs.readdirSync() вызывается с параметром withFileTypes установленным на true, результирующий массив заполняется объектами <fs.Dirent>, а не строками или <Buffer>.

dirent.isBlockDevice()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает блочное устройство.

dirent.isCharacterDevice()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает символьное устройство.

dirent.isDirectory()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает каталог файловой системы.

dirent.isFIFO()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает канал FIFO.

dirent.isFile()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает обычный файл.

dirent.isSocket()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает сокет.

dirent.isSymbolicLink()
Добавлен в: v10.10.0
  • Возвращает: <булево>

Возвращает true если объект <fs.Dirent> описывает символическую ссылку.

dirent.name
Добавлен в: v10.10.0
  • <строка> | <Buffer>

Имя файла, на который ссылается этот объект <fs.Dirent>. Тип этого значения определяется параметром options.encoding , переданным методу fs.readdir() или fs.readdirSync().

dirent.parentPath
Добавлен в: v21.4.0, v20.12.0, v18.20.0
Устойчивость: 1 – Экспериментальная
  • <строка>

Путь к родительской директории файла, на который ссылается этот объект <fs.Dirent>.

dirent.path
Добавлен в: v20.1.0, v18.17.0Устарел с: v21.5.0, v20.12.0, v18.20.0
Устойчивость: 0 - Устарел: Используйте dirent.parentPath вместо этого.
  • <строка>

Псевдоним для dirent.parentPath.

Класс: fs.FSWatcher

Добавлен в: v0.5.8
  • Расширяет <EventEmitter>

Успешное вызов метода fs.watch() вернёт новый объект <fs.FSWatcher>.

Все объекты <fs.FSWatcher> излучают событие 'change' всякий раз, когда изменяется конкретный наблюдаемый файл.

Событие: 'change'
Добавлен в: v0.5.8
  • eventType <строка> Тип события изменения, которое произошло
  • filename <строка> | <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 <Ошибка>

Выпускается, когда при наблюдении за файлом возникает ошибка. Повреждённый объект <fs.FSWatcher> больше недоступен в обработчике событий.

watcher.close()
Добавлен в: v0.5.8

Прекратить наблюдение за изменениями в заданном <fs.FSWatcher>. После остановки объект <fs.FSWatcher> больше недоступен.

watcher.ref()
Добавлен в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался до тех пор, пока активен <fs.FSWatcher>. Вызов watcher.ref() несколько раз не повлияет.

По умолчанию все объекты <fs.FSWatcher> «ссылаются», что обычно делает вызов watcher.ref() ненужным, если ранее не был вызван watcher.unref().

watcher.unref()
Добавлен в: v14.3.0, v12.20.0
  • Возвращает: <fs.FSWatcher>

При вызове активный объект <fs.FSWatcher> не потребует, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей цикл событий, процесс может завершиться до вызова обратного вызова объекта <fs.FSWatcher>. Вызов watcher.unref() несколько раз не повлияет.

Класс: fs.StatWatcher

Добавлен в: v14.3.0, v12.20.0
  • Расширяет <EventEmitter>

Успешный вызов метода fs.watchFile() вернёт новый объект <fs.StatWatcher>.

watcher.ref()
Добавлен в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове запрашивает, чтобы цикл событий Node.js не завершался до тех пор, пока активен <fs.StatWatcher>. Вызов watcher.ref() несколько раз не повлияет.

По умолчанию все объекты <fs.StatWatcher> «ссылаются», что обычно делает вызов watcher.ref() ненужным, если ранее не был вызван watcher.unref().

watcher.unref()
Добавлен в: v14.3.0, v12.20.0
  • Возвращает: <fs.StatWatcher>

При вызове активный объект <fs.StatWatcher> не потребует, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей цикл событий, процесс может завершиться до вызова обратного вызова объекта <fs.StatWatcher>. Вызов watcher.unref() несколько раз не повлияет.

Класс: fs.ReadStream

Добавлен в: v0.1.93
  • Расширяет: <stream.Readable>

Экземпляры <fs.ReadStream> создаются и возвращаются с помощью функции fs.createReadStream().

Событие: 'close'
Добавлен в: v0.1.93

Выпускается, когда базовый дескриптор файла <fs.ReadStream> был закрыт.

Событие: 'open'
Добавлен в: v0.1.93
  • fd <целое> Целое число дескриптора файла, используемого <fs.ReadStream>.

Выпускается, когда дескриптор файла <fs.ReadStream> был открыт.

Событие: 'ready'
Добавлен в: v9.11.0

Выпускается, когда <fs.ReadStream> готов к использованию.

Вызывается сразу после 'open'.

readStream.bytesRead
Добавлен в: v6.4.0
  • <число>

Количество прочитанных байтов.

readStream.path
Добавлен в: v0.1.93
  • <строка> | <Buffer>

Путь к файлу, из которого выполняется чтение потоком, указанный в первом аргументе к fs.createReadStream(). Если path передаётся как строка, то readStream.path будет строкой. Если path передаётся как <Buffer>, то readStream.path будет <Buffer>. Если fd указано, то readStream.path будет undefined.

readStream.pending
Добавлен в: v11.2.0, v10.16.0
  • <логическое>

Это свойство true , если базовый файл ещё не открыт, т.е. до момента срабатывания события 'ready'.

Класс: fs.Stats

История
Версия Изменения
v22.0.0

Публичный конструктор устарел.

v8.1.0

Добавлены времена как числа.

v0.1.21

Добавлен в: v0.1.21

Объект <fs.Stats> предоставляет информацию о файле.

Объекты, возвращаемые методами fs.stat(), fs.lstat(), fs.fstat() и их синхронными аналогами, имеют этот тип. Если bigint в options параметре, переданном этим методам, равно true, числовые значения будут bigint вместо number, а объект будет содержать дополнительные свойства с наносекундной точностью, имеющие суффикс Ns. Объекты типа Stat не должны создаваться напрямую с использованием ключевого слова new.

Stats {
  dev: 2114,
  ino: 48064969,
  mode: 33188,
  nlink: 1,
  uid: 85,
  gid: 100,
  rdev: 0,
  size: 527,
  blksize: 4096,
  blocks: 8,
  atimeMs: 1318289051000.1,
  mtimeMs: 1318289051000.1,
  ctimeMs: 1318289051000.1,
  birthtimeMs: 1318289051000.1,
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT } copy

bigint версия:

BigIntStats {
  dev: 2114n,
  ino: 48064969n,
  mode: 33188n,
  nlink: 1n,
  uid: 85n,
  gid: 100n,
  rdev: 0n,
  size: 527n,
  blksize: 4096n,
  blocks: 8n,
  atimeMs: 1318289051000n,
  mtimeMs: 1318289051000n,
  ctimeMs: 1318289051000n,
  birthtimeMs: 1318289051000n,
  atimeNs: 1318289051000000000n,
  mtimeNs: 1318289051000000000n,
  ctimeNs: 1318289051000000000n,
  birthtimeNs: 1318289051000000000n,
  atime: Mon, 10 Oct 2011 23:24:11 GMT,
  mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT } copy
stats.isBlockDevice()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает блок-устройство.

stats.isCharacterDevice()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает символьное устройство.

stats.isDirectory()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает директорию файловой системы.

Если объект <fs.Stats> был получен при вызове fs.lstat() на символической ссылке, которая разрешается в директорию, этот метод вернет false. Это связано с тем, что fs.lstat() возвращает информацию о самой символической ссылке, а не о пути, к которому она указывает.

stats.isFIFO()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает канал FIFO (первым вошел — первым вышел).

stats.isFile()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает обычный файл.

stats.isSocket()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает сокет.

stats.isSymbolicLink()
Добавлен в: v0.1.10
  • Возвращает: <boolean>

Возвращает true , если объект <fs.Stats> описывает символическую ссылку.

Этот метод допустим только при использовании fs.lstat().

stats.dev
  • <number> | <bigint>

Числовой идентификатор устройства, содержащего файл.

stats.ino
  • <number> | <bigint>

Номер индексного узла (inode) файла, специфичный для файловой системы.

stats.mode
  • <number> | <bigint>

Поле битов, описывающее тип и режим файла.

stats.nlink
  • <number> | <bigint>

Количество жёстких ссылок на файл.

stats.uid
  • <number> | <bigint>

Числовой идентификатор пользователя, владеющего файлом (POSIX).

stats.gid
  • <number> | <bigint>

Числовой идентификатор группы, владеющей файлом (POSIX).

stats.rdev
  • <number> | <bigint>

Числовой идентификатор устройства, если файл представляет собой устройство.

stats.size
  • <number> | <bigint>

Размер файла в байтах.

Если файловая система не поддерживает получение размера файла, это будет 0.

stats.blksize
  • <number> | <bigint>

Размер блока файловой системы для операций ввода-вывода.

stats.blocks
  • <number> | <bigint>

Количество выделенных блоков для этого файла.

stats.atimeMs
Добавлен в: v8.1.0
  • <number> | <bigint>

Маркировка времени последнего доступа к файлу, выраженная в миллисекундах с момента эпохи POSIX.

stats.mtimeMs
Добавлен в: v8.1.0
  • <number> | <bigint>

Маркировка времени последнего изменения файла, выраженная в миллисекундах с момента эпохи POSIX.

stats.ctimeMs
Добавлен в: v8.1.0
  • <number> | <bigint>

Маркировка времени последнего изменения статуса файла, выраженная в миллисекундах с момента эпохи POSIX.

stats.birthtimeMs
Добавлен в: v8.1.0
  • <number> | <bigint>

Маркировка времени создания файла, выраженная в миллисекундах с момента эпохи POSIX.

stats.atimeNs
Добавлен в: v12.10.0
  • <bigint>

Присутствует только тогда, когда bigint: true передано в метод, генерирующий объект. Маркировка времени последнего доступа к файлу, выраженная в наносекундах с момента эпохи POSIX.

stats.mtimeNs
Добавлен в: v12.10.0
  • <bigint>

Присутствует только тогда, когда bigint: true передано в метод, генерирующий объект. Маркировка времени последнего изменения файла, выраженная в наносекундах с момента эпохи POSIX.

stats.ctimeNs
Добавлен в: v12.10.0
  • <bigint>

Только при передаче bigint: true в метод, генерирующий объект. Отметка времени, указывающая последний раз, когда изменился статус файла, выраженная в наносекундах с момента эпохи POSIX.

stats.birthtimeNs
Добавлена в: v12.10.0
  • <bigint>

Только при передаче bigint: true в метод, генерирующий объект. Отметка времени, указывающая время создания файла в наносекундах с момента эпохи POSIX.

stats.atime
Добавлена в: v0.11.13
  • <Date>

Отметка времени, указывающая последний раз, когда был получен доступ к файлу.

stats.mtime
Добавлена в: v0.11.13
  • <Date>

Отметка времени, указывающая последний раз, когда файл был изменён.

stats.ctime
Добавлена в: v0.11.13
  • <Date>

Отметка времени, указывающая последний раз, когда изменился статус файла.

stats.birthtime
Добавлена в: v0.11.13
  • <Date>

Отметка времени, указывающая время создания файла.

Значения времени Stat

Свойства atimeMs, mtimeMs, ctimeMs, birthtimeMs — числовые значения, содержащие соответствующие времена в миллисекундах. Их точность зависит от платформы. Когда bigint: true передаётся в метод, генерирующий объект, свойства будут bigint, в противном случае — числа.

Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs — bigint, содержащие соответствующие времена в наносекундах. Они присутствуют только при передаче bigint: true в метод, генерирующий объект. Их точность зависит от платформы.

atime, mtime, ctime, и birthtime — Date объект, альтернативные представления различных времен. Значения Date и числовые значения не связаны. Присвоение нового числового значения или изменение значения Date не отразится в соответствующем альтернативном представлении.

Временные значения в объекте stat имеют следующие семантики:

  • atime "Время доступа": Время последнего доступа к данным файла. Изменяется системными вызовами mknod(2), utimes(2) и read(2).
  • mtime "Время изменения": Время последнего изменения данных файла. Изменяется системными вызовами mknod(2), utimes(2) и write(2).
  • ctime "Время изменения статуса": Время последнего изменения статуса файла (модификация данных 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 <целое> Целочисленный дескриптор файла, используемый <fs.WriteStream>.

Выпускается, когда файл <fs.WriteStream> открыт.

Событие: 'ready'
Добавлена в: v9.11.0

Выпускается, когда <fs.WriteStream> готов к использованию.

Вызывается сразу после 'open'.

writeStream.bytesWritten
Добавлена в: v0.4.7

Количество записанных байтов до сих пор. Не включает данные, которые все ещё находятся в очереди на запись.

writeStream.close([callback])
Добавлен в: v0.9.4
  • callback <Функция>
    • err <Ошибка>

Закрывает writeStream. По желанию принимает обратный вызов, который будет выполнен после того, как writeStream будет закрыт.

writeStream.path
Добавлен в: v0.1.93

Путь к файлу, в который записывает поток, указанный в первом аргументе для fs.createWriteStream(). Если path передаётся как строка, то writeStream.path будет строкой. Если path передаётся как <Буфер>, то writeStream.path будет <Буфером>.

writeStream.pending
Добавлен в: v11.2.0
  • <логическое значение>

Это свойство равно true , если основной файл ещё не открыт, то есть до того, как произойдёт событие 'ready'.

fs.constants

  • <Объект>

Возвращает объект, содержащий часто используемые константы для операций с файловой системой.

FS константы

Следующие константы экспортируются fs.constants и fsPromises.constants.

Не каждая константа будет доступна на каждой операционной системе; это особенно важно для Windows, где многие определения, специфичные для POSIX, недоступны. Для портативных приложений рекомендуется проверять их наличие перед использованием.

Для использования нескольких констант используйте побитовое ИЛИ | оператор.

Пример:

import { open, constants } from 'node:fs';

const {
  O_RDWR,
  O_CREAT,
  O_EXCL,
} = constants;

open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
  // ...
}); copy
Константы доступа к файлам

Следующие константы предназначены для использования в качестве параметра mode , передаваемого в fsPromises.access(), fs.access() и fs.accessSync().

Константа Описание
F_OK Флаг, указывающий, что файл виден для вызывающего процесса. Это полезно для определения, существует ли файл, но ничего не говорит о правах доступа rwx. Значение по умолчанию, если режим не указан.
R_OK Флаг, указывающий, что вызывающий процесс может читать файл.
W_OK Флаг, указывающий, что вызывающий процесс может записывать в файл.
X_OK Флаг, указывающий, что вызывающий процесс может выполнять файл. Это не имеет эффекта в Windows (будет работать как fs.constants.F_OK).

Определения также доступны в Windows.

Константы копирования файлов

Следующие константы предназначены для использования с fs.copyFile().

Константа Описание
COPYFILE_EXCL При наличии, операция копирования завершится ошибкой, если целевой путь уже существует.
COPYFILE_FICLONE При наличии, операция копирования попытается создать ссылку с копированием при записи. Если платформа не поддерживает копирование при записи, то используется механизм копирования по умолчанию.
COPYFILE_FICLONE_FORCE При наличии, операция копирования попытается создать ссылку с копированием при записи. Если платформа не поддерживает копирование при записи, то операция завершится ошибкой.

Определения также доступны в 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

Важно правильно упорядочить операции, ожидая результатов одной операции перед вызовом другой:

Модули MJS

import { rename, stat } from 'node:fs/promises';

const oldPath = '/tmp/hello';
const newPath = '/tmp/world';

try {
  await rename(oldPath, newPath);
  const stats = await stat(newPath);
  console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
  console.error('there was an error:', error.message);
}

Модули CJS

const { rename, stat } = require('node:fs/promises');

(async function(oldPath, newPath) {
  try {
    await rename(oldPath, newPath);
    const stats = await stat(newPath);
    console.log(`stats: ${JSON.stringify(stats)}`);
  } catch (error) {
    console.error('there was an error:', error.message);
  }
})('/tmp/hello', '/tmp/world');

Или, при использовании API с обратными вызовами, перенесите вызов fs.stat() в обратный вызов операции fs.rename():

Модули MJS

import { rename, stat } from 'node:fs';

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});

Модули CJS

const { rename, stat } = require('node:fs/promises');

rename('/tmp/hello', '/tmp/world', (err) => {
  if (err) throw err;
  stat('/tmp/world', (err, stats) => {
    if (err) throw err;
    console.log(`stats: ${JSON.stringify(stats)}`);
  });
});

Пути к файлам

Большинство fs операций принимают пути к файлам, которые могут быть заданы в виде строки, объекта <Buffer> или объекта <URL> с использованием протокола file:.

Пути в виде строк

Пути в виде строк интерпретируются как последовательности символов UTF-8, определяющие имя файла в абсолютном или относительном формате. Относительные пути будут разрешаться относительно текущей рабочей директории, определяемой вызовом process.cwd().

Пример использования абсолютного пути в POSIX:

import { open } from 'node:fs/promises';

let fd;
try {
  fd = await open('/open/some/file.txt', 'r');
  // Do something with the file
} finally {
  await fd?.close();
} copy

Пример использования относительного пути в POSIX (относительно process.cwd()):

import { open } from 'node:fs/promises';

let fd;
try {
  fd = await open('file.txt', 'r');
  // Do something with the file
} finally {
  await fd?.close();
} copy
Пути к файлам в виде URL
Добавлено в: v7.6.0

Для большинства функций модуля node:fs, аргумент path или filename может быть передан в виде объекта <URL> с использованием протокола file:.

import { readFileSync } from 'node:fs';

readFileSync(new URL('file:///tmp/hello')); copy

file: URL всегда являются абсолютными путями.

Особенности разных платформ

В Windows, file: объекты <URL> с именем хоста преобразуются в пути UNC, а file: объекты <URL> с буквами диска преобразуются в абсолютные локальные пути. file: объекты <URL> без имени хоста и буквы диска приведут к ошибке:

import { readFileSync } from 'node:fs';
// On Windows :

// - WHATWG file URLs with hostname convert to UNC path
// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
readFileSync(new URL('file://hostname/p/a/t/h/file'));

// - WHATWG file URLs with drive letters convert to absolute path
// file:///C:/tmp/hello => C:\tmp\hello
readFileSync(new URL('file:///C:/tmp/hello'));

// - WHATWG file URLs without hostname must have a drive letters
readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
readFileSync(new URL('file:///c/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute copy

file: объекты <URL> с буквами диска должны использовать : в качестве разделителя сразу после буквы диска. Использование другого разделителя приведет к ошибке.

На всех остальных платформах, file: объекты <URL> с именем хоста не поддерживаются и приведут к ошибке:

import { readFileSync } from 'node:fs';
// On other platforms:

// - WHATWG file URLs with hostname are unsupported
// file://hostname/p/a/t/h/file => throw!
readFileSync(new URL('file://hostname/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute

// - WHATWG file URLs convert to absolute path
// file:///tmp/hello => /tmp/hello
readFileSync(new URL('file:///tmp/hello')); copy

file: объекты <URL> с закодированными символами косой черты приведут к ошибке на всех платформах:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */

// On POSIX
readFileSync(new URL('file:///p/a/t/h/%2F'));
readFileSync(new URL('file:///p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
/ characters */ copy

В Windows, file: объекты <URL> с закодированными обратными слешами приведут к ошибке:

import { readFileSync } from 'node:fs';

// On Windows
readFileSync(new URL('file:///C:/path/%5C'));
readFileSync(new URL('file:///C:/path/%5c'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */ copy
Пути в виде объекта Buffer

Пути, заданные с помощью объекта <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 по этой ссылке: https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#fully-qualified-vs-relative-paths.

Дескрипторы файлов

В системах 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/api/fs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API