Spec-Zone.ru › Node.js 16 LTS

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

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

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

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

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

Модули MJS

import * as fs from 'fs/promises';

Модули CJS

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

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

Модули MJS

import * as fs from 'fs';

Модули CJS

const fs = require('fs');

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

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

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

Модули MJS

import { unlink } from '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('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 'fs';

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

Модули CJS

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

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

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

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

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

Модули MJS

import { unlinkSync } from 'fs';

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

Модули CJS

const { unlinkSync } = require('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])
Добавлен в: v10.0.0
  • data <строка> | <Буфер> | <Массив типов> | <DataView>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
  • Возвращает: <Обещание> Выполняется с 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 'fs/promises';

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

В отличие от значения по умолчанию 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 '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);

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

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

import { open } from 'fs/promises';

const fd = await open('sample.txt');
fd.createReadStream({ start: 90, end: 99 });
filehandle.createWriteStream([options])
Добавлен в: v16.11.0
  • options <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • autoClose <логическое значение> По умолчанию: true
    • emitClose <логическое значение> По умолчанию: true
    • start <целое число>
  • Возвращает: <fs.Поток записи>

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
  • Возвращает: <Promise> Выполняется успешно с undefined.

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

В отличие от filehandle.sync, этот метод не очищает изменённые метаданные.

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

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

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

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

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

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

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

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

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

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

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

filehandle.readv(buffers[, position])
Добавлен в: v13.13.0, v12.17.0
  • buffers <Массив буферов> | <Массив с типом> | <Массив DataView>
  • position <целое число> Смещение от начала файла, где должны быть считаны данные. Если position не является number, данные будут читаться с текущей позиции.
  • Возвращает: <Promise> При успешном выполнении возвращает объект с двумя свойствами:
    • bytesRead <целое число> количество прочитанных байтов
    • buffers <Массив буферов> | <Массив с типом> | <Массив DataView> свойство, содержащее ссылку на переданный аргумент buffers.

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

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

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

v10.0.0

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

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

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

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

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

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

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

import { open } from 'fs/promises';

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

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

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

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

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

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

Параметр buffer будет сериализовать объект с явной функцией toString.

v14.0.0

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

v10.0.0

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

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

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

Если buffer — обычный объект, он должен иметь собственную (не унаследованную) функцию toString.

Промис разрешается с объектом, содержащим две свойства:

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

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

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

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

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

v14.0.0

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

v10.0.0

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

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

Запись string в файл. Если string — не строка или объект с собственной функцией toString, промис отклоняется с ошибкой.

Промис разрешается с объектом, содержащим две свойства:

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

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

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

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

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

v14.12.0

Параметр data будет сериализовать объект с явной функцией toString.

v14.0.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

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

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

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

fsPromises.access(path[, mode])

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

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

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

import { access } from 'fs/promises';
import { constants } from 'fs';

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

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

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

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

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

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

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

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

fsPromises.chmod(path, mode)

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

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

fsPromises.chown(path, uid, gid)

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

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

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

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

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

v10.0.0

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

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

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

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

import { constants } from 'fs';
import { copyFile } from 'fs/promises';

try {
  await copyFile('source.txt', 'destination.txt');
  console.log('source.txt was copied to destination.txt');
} catch {
  console.log('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.log('The file could not be copied');
}

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

Добавлен в: v16.7.0
Стабильность: 1 - Экспериментально
  • src <string> | <URL> исходный путь для копирования.
  • dest <string> | <URL> путь назначения для копирования.
  • options <Объект>
    • dereference <логическое> Разрешать ссылки на символы. По умолчанию: false.
    • errorOnExist <логическое> Если force равно false, а пункт назначения существует, выбросить ошибку. По умолчанию: false.
    • filter <Функция> Функция для фильтрации копируемых файлов/каталогов. Вернуть true для копирования элемента, false для пропуска. Также может вернуть Promise который разрешается в true или false По умолчанию: undefined.
    • force <логическое> Перезаписать существующий файл или каталог. Операция копирования пропустит ошибки, если вы установите это значение в false и пункт назначения существует. Используйте параметр errorOnExist чтобы изменить это поведение. По умолчанию: true.
    • preserveTimestamps <логическое> Если true метки времени с src будут сохранены. По умолчанию: false.
    • recursive <логическое> рекурсивно копировать каталоги. По умолчанию: false
  • Возвращает: <Promise> Выполняется со значением undefined при успехе.

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

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

fsPromises.lchmod(path, mode)

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

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

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

fsPromises.lchown(path, uid, gid)

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

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

v10.0.0

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

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

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

fsPromises.lutimes(path, atime, mtime)

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

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

fsPromises.link(existingPath, newPath)

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

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

fsPromises.lstat(path[, options])

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

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

v10.0.0

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

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

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

fsPromises.mkdir(path[, options])

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

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

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

fsPromises.mkdtemp(prefix[, options])

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

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

v10.0.0

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

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

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

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

import { mkdtemp } from 'fs/promises';

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

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

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

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

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

v10.0.0

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

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

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

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

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

fsPromises.opendir(path[, options])

История
Версия Изменения
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
  • Возвращает: <Promise> Возвращает <fs.Dir>.

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

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

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

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

import { opendir } from 'fs/promises';

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

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

fsPromises.readdir(path[, options])

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

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

v10.0.0

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

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

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

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

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

import { readdir } from 'fs/promises';

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

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

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

import { readFile } from '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);
}

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

Удаляет каталог, идентифицированный как path.

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

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

fsPromises.rm(path[, options])

Добавлена в: v14.14.0
  • path <строка> | <Буфер> | <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.symlink(target, path[, type])

Добавлена в: v10.0.0
  • target <строка> | <Буфер> | <URL>
  • path <строка> | <Буфер> | <URL>
  • type <строка> По умолчанию: 'file'
  • Возвращает: <Promise> Возвращает undefined при успешном выполнении.

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

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

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)

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

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

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

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

fsPromises.watch(filename[, options])

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

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

const { watch } = require('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;
  }
})();

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

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

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

История
Версия Изменения
v15.14.0

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

v15.2.0, v14.17.0

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

v14.12.0

Параметр data будет сериализовать объект с явной функцией toString.

v14.0.0

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

v10.0.0

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

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

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

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

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

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

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

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

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

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

import { writeFile } from 'fs/promises';
import { Buffer } from '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);
}

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

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

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

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

fs.access(path[, mode], 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.W_OK | fs.constants.R_OK).

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

import { access, constants } from '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 exists in the current directory, and if it is writable.
access(file, constants.F_OK | constants.W_OK, (err) => {
  if (err) {
    console.error(
      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);
  } else {
    console.log(`${file} exists, and it is writable`);
  }
});

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

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

import { access, open, close } from '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;
      });
    }
  });
});

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

import { open, close } from '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;
    });
  }
});

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

import { access, open, close } from '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;
      });
    }
  });
});

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

import { open, close } from '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;
    });
  }
});

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

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

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

fs.appendFile(path, data[, options], 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'.
  • callback <Функция>
    • err <Ошибка>

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

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

import { appendFile } from 'fs';

appendFile('message.txt', 'data to append', (err) => {
  if (err) throw err;
  console.log('The "data to append" was appended to file!');
});

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

import { appendFile } from 'fs';

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

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

import { open, close, appendFile } from '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;
  }
});

fs.chmod(path, mode, 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 'fs';

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

Аргумент 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 исполнение/поиск другими
END_OF_DOCUMENT_MARKER

Более простой способ построения 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)

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

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

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

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

v8.5.0

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

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

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

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

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

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

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

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

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

fs.createReadStream(path[, options])

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

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

v16.10.0

Опция fs не нуждается в методе close, если autoClose имеет значение false.

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 <логическое значение> По умолчанию: true
    • emitClose <логическое значение> По умолчанию: true
    • start <целое число>
    • end <целое число> По умолчанию: Infinity
    • highWaterMark <целое число> По умолчанию: 64 * 1024
    • fs <Объект> | <null> По умолчанию: null
  • Возвращает: <fs.Поток чтения>

В отличие от значения по умолчанию 16 КБ для <stream.Readable>, поток, возвращаемый этим методом, имеет значение по умолчанию 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 '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);

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

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

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

import { createReadStream } from 'fs';

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

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

fs.createWriteStream(path[, options])

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

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

v16.10.0

Опция fs не нуждается в методе close, если autoClose имеет значение false.

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
  • Возвращает: <fs.Поток записи>

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

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

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

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

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

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

fs.exists(path, callback)

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

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

v1.0.0

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

v0.0.2

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

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

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

import { exists } from 'fs';

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

Параметры этого обратного вызова не согласованы с другими обратными вызовами 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 '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;
        });
      }
    });
  }
});

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

import { open, close } from '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;
    });
  }
});

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

import { open, close, exists } from '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');
  }
});

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

import { open, close } from '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;
    });
  }
});

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

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

fs.fchmod(fd, mode, 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)

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

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

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

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

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

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

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

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

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

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

v7.0.0

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

v4.1.0

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

v0.4.2

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

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

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

fs.lchmod(path, mode, callback)

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

Устаревший с: v0.4.7

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

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

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

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

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

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

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

v10.0.0

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

v7.0.0

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

v0.4.7

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

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

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

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

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

Добавлен в: v14.5.0, v12.19.0
  • path <string> | <Buffer> | <URL>
  • atime <число> | <string> | <Дата>
  • mtime <число> | <string> | <Дата>
  • callback <Функция>
    • err <Ошибка>

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

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

fs.link(existingPath, newPath, callback)

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

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.30

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

  • path <string> | <Buffer> | <URL>
  • options <Объект>
    • 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)

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

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

v10.12.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.1.8

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

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

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

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

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

import { mkdir } from 'fs';

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

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

import { mkdir } from 'fs';

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

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

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

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

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

v10.0.0

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

v7.0.0

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

v6.2.1

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

v5.10.0

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

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

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

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

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

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

import { mkdtemp } from 'fs';

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

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

import { tmpdir } from 'os';
import { mkdtemp } from '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 '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.
});

fs.open(path[, flags[, mode]], 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, как документировано в Именование файлов, путей и имён. В NTFS, если имя файла содержит двоеточие, Node.js откроет поток файловой системы, как описано на странице MSDN здесь.

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

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

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

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

v12.12.0

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

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

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

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

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

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

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

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

v7.4.0

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

v6.0.0

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

v0.0.2

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

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

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

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

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

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

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

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

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

v13.11.0, v12.17.0

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

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

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

fs.readdir(path[, options], 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 <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <логическое значение> По умолчанию: false
  • callback <Функция>
    • err <Ошибка>
    • files <Массив строк> | <Массив буферов> | <Массив fs.Dirent>

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

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

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

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

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

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

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

v15.2.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> позволяет прервать выполняемое чтение файла
  • callback <Function>
    • err <Error> | <AggregateError>
    • data <string> | <Buffer>

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

import { readFile } from 'fs';

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

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

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

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

import { readFile } from 'fs';

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

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

import { readFile } from '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>
});

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

import { readFile } from '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();

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

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

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

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

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

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

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

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

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

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

v7.6.0

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

v7.0.0

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

v0.1.31

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

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

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

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

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

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

Добавлен в: v13.13.0, v12.17.0
  • fd <integer>
  • buffers <ArrayBufferView[]>
  • position <integer>
  • callback <Function>
    • err <Error>
    • bytesRead <integer>
    • buffers <ArrayBufferView[]>

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

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

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

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

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

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

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

v8.0.0

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

v7.6.0

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

v7.0.0

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

v6.4.0

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

v6.0.0

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

v0.1.31

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

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

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

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

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

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

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

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

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

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

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

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

Добавлена в: 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)

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

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

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

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

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

import { rename } from 'fs';

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

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

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

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

v16.0.0

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

v16.0.0

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

v14.14.0

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

v13.3.0, v12.16.0

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

v12.10.0

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

v10.0.0

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

v7.6.0

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

v7.0.0

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

v0.0.2

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

  • path <строка> | <Буфер> | <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)

Добавлена в: 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.
  • callback <Функция>
    • err <Ошибка>

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

fs.stat(path[, options], 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 <строка> | <Буфер> | <URL>
  • options <Объект>
    • bigint <логическое> Должны ли числовые значения в возвращаемом объекте <fs.Stats> быть типа bigint. По умолчанию: false.
  • callback <Функция>
    • err <Ошибка>
    • stats <fs.Stats>

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

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

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

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

Например, с такой структурой каталогов:

- txtDir
-- file.txt
- app.js

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

import { stat } from '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);
  });
}

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

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
}

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

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

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

v7.6.0

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

v0.1.31

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

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

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

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

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

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

import { symlink } from 'fs';

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

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

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

fs.truncate(path[, len], 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 '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('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)

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

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)

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

История
Версия Изменения
v15.9.0

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

v7.6.0

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

v7.0.0

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

v0.5.10

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

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

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

В 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 'fs';
watch('somedir', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
});

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

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

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

v7.6.0

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

v0.1.31

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

  • filename <string> | <Buffer> | <URL>
  • options <Объект>
    • bigint <boolean> По умолчанию: false
    • persistent <boolean> По умолчанию: true
    • interval <целое число> По умолчанию: 5007
  • listener <Функция>
    • current <fs.Stats>
    • previous <fs.Stats>
  • Возвращает: <fs.StatWatcher>

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

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

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

import { watchFile } from 'fs';

watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
});

Эти объекты stat являются экземплярами fs.Stat.

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

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

Когда операция fs.watchFile приводит к ошибке ENOENT, она вызовет обработчик один раз, со всеми полями, обнуленными (или, для дат, с эпохой Unix). Если файл создается позже, обработчик будет вызван снова с последними объектами stat. Это изменение функциональности с версии 0.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)

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

Параметр buffer будет преобразовывать объект с явным указанием функции toString.

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 <Буфер> | <Массив типов> | <DataView> | <строка> | <объект>
  • offset <целое число>
  • length <целое число>
  • position <целое число>
  • callback <Функция>
    • err <Ошибка>
    • bytesWritten <целое число>
    • buffer <Буфер> | <Массив типов> | <DataView>

Запишите buffer в файл, указанный в fd. Если buffer — обычный объект, он должен иметь собственную функцию toString.

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, string[, position[, encoding]], callback)

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

Запишите string в файл, указанный в fd. Если string не строка или объект с собственной функцией toString, будет выброшено исключение.

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)

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

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

v15.2.0

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

v14.12.0

Параметр data будет преобразовывать объект с явным указанием функции toString.

v14.0.0

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

v10.10.0

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

v10.0.0

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

v7.4.0

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

v7.0.0

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

v5.0.0

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

v0.1.29

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

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

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

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

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

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

Если data является простым объектом, у него должна быть собственная (не унаследованная) функция toString.

import { writeFile } from 'fs';
import { Buffer } from '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!');
});

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

import { writeFile } from 'fs';

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

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

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

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

import { writeFile } from 'fs';
import { Buffer } from '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();

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

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

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

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

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

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

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

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

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

Добавлено в: v12.9.0
  • fd <integer>
  • buffers <ArrayBufferView[]>
  • position <integer>
  • callback <Function>
    • err <Error>
    • bytesWritten <integer>
    • buffers <ArrayBufferView[]>

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

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

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

Если этот метод util.promisify()ed, он возвращает промис для 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.W_OK | fs.constants.R_OK).

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

import { accessSync, constants } from 'fs';

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

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

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

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

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

import { appendFileSync } from 'fs';

try {
  appendFileSync('message.txt', 'data to append');
  console.log('The "data to append" was appended to file!');
} catch (err) {
  /* Handle the error */
}

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

import { appendFileSync } from 'fs';

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

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

import { openSync, closeSync, appendFileSync } from '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);
}

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

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

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

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

При копировании каталога в другой каталог шаблоны не поддерживаются, и поведение аналогично 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 'fs';

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

fs.fchmodSync(fd, mode)

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

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

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

fs.fchownSync(fd, uid, gid)

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

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

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

fs.fdatasyncSync(fd)

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

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

fs.fstatSync(fd[, options])

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

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

v0.1.95

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

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

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

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

fs.fsyncSync(fd)

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

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

fs.ftruncateSync(fd[, len])

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

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

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

fs.futimesSync(fd, atime, mtime)

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

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

v0.4.2

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

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

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

fs.lchmodSync(path, mode)

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

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

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

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

fs.lchownSync(path, uid, gid)

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

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

v0.4.7

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

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

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

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

fs.lutimesSync(path, atime, mtime)

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

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

fs.linkSync(existingPath, newPath)

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

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

v0.1.31

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

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

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

fs.lstatSync(path[, options])

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

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

v10.5.0

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

v7.6.0

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

v0.1.30

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

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

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

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

fs.mkdirSync(path[, options])

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

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

v10.12.0

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

v7.6.0

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

v0.1.21

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

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

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

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

fs.mkdtempSync(prefix[, options])

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

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

v5.10.0

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

  • prefix <строка>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
  • Возвращает: <строка>

Возвращает путь созданной директории.

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

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

fs.opendirSync(path[, options])

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

Была добавлена опция bufferSize.

v12.12.0

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

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

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

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

v7.6.0

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

v0.1.21

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

  • path <строка> | <Буфер> | <URL>
  • options <строка> | <Объект>
    • encoding <строка> По умолчанию: 'utf8'
    • withFileTypes <логическое> По умолчанию: 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 'fs';

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

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

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

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>
  • Возвращает: <число>

Возвращает количество 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
    • position <целое> | <bigint> По умолчанию: null
  • Возвращает: <число>

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

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

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

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

Добавлена в: v13.13.0, v12.17.0
  • fd <целое>
  • buffers <ArrayBufferView[]>
  • position <целое>
  • Возвращает: <число> Количество считанных байт.

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

fs.realpathSync(path[, options])

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

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

v7.6.0

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

v6.4.0

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

v6.0.0

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

v0.1.31

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

  • path <строка> | <Буфер> | <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 <строка> | <Buffer> | <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])

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

Синхронно удаляет файлы и каталоги (по образцу стандартной утилиты 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 <строка> | <Buffer> | <URL>
  • options <Объект>
    • bigint <логическое значение> Нужно ли, чтобы числовые значения в возвращаемом объекте <fs.Stats> были типа bigint. Значение по умолчанию: false.
    • throwIfNoEntry <логическое значение> Выбрасывать ли исключение, если запись в файловой системе не существует, вместо возврата undefined. Значение по умолчанию: true.
  • Возвращает: <fs.Stats>

Получает <fs.Stats> для пути.

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 <строка> | <Buffer> | <URL>
  • path <строка> | <Buffer> | <URL>
  • type <строка>

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

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

fs.truncateSync(path[, len])

Добавлена в: v0.8.6
  • path <строка> | <Buffer> | <URL>
  • len <целое число> Значение по умолчанию: 0

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

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

fs.unlinkSync(path)

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

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

v0.1.21

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

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

Синхронная функция unlink(2). Возвращает undefined.

fs.utimesSync(path, atime, mtime)

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

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

v7.6.0

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

v4.1.0

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

v0.4.2

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

  • path <строка> | <Буфер> | <URL>
  • atime <число> | <строка> | <Дата>
  • mtime <число> | <строка> | <Дата>

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

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

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

История
Версия Изменения
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 <строка> | <Буфер> | <Массив_типов> | <DataView> | <Объект>
  • options <Объект> | <строка>
    • encoding <строка> | <null> По умолчанию: 'utf8'
    • mode <целое> По умолчанию: 0o666
    • flag <строка> См. поддержку флагов файловой системы flags. По умолчанию: 'w'.

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

Если data — обычный объект, он должен иметь собственное (не унаследованное) свойство функции toString.

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

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

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

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

Параметр buffer будет преобразовывать объект в строку с явной функцией toString.

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 <Буфер> | <Массив_типов> | <DataView> | <строка> | <Объект>
  • offset <целое>
  • length <целое>
  • position <целое>
  • Возвращает: <число> Количество записанных байтов.

Если buffer — обычный объект, он должен иметь собственное (не унаследованное) свойство функции toString.

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

fs.writeSync(fd, string[, position[, encoding]])

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

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

v14.0.0

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

v7.2.0

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

v0.11.5

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

  • fd <целое>
  • string <строка> | <Объект>
  • position <целое>
  • encoding <строка>
  • Возвращает: <число> Количество записанных байтов.

Если string — обычный объект, он должен иметь собственное (не унаследованное) свойство функции toString.

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

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

Добавлен в: v12.9.0
  • fd <целое>
  • buffers <ArrayBufferView[]>
  • position <целое>
  • Возвращает: <число> Количество записанных байтов.

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

Общие объекты

Общие объекты используются всеми вариантами API файловой системы (promise, callback и синхронный).

Класс: fs.Dir

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

Класс, представляющий поток каталога.

Создается с помощью fs.opendir(), fs.opendirSync() или fsPromises.opendir().

import { opendir } from 'fs/promises';

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

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

dir.close()
Добавлен в: v12.12.0
  • Возвращает: <Promise>

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

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

dir.close(callback)
Добавлен в: 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
  • <строка> | <Буфер>

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

Класс: fs.FSWatcher

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

Успешное вызов метода fs.watch() вернёт новый объект <fs.FSWatcher>.

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

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

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

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

import { watch } from 'fs';
// Example when handled through fs.watch() listener
watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
  if (filename) {
    console.log(filename);
    // Prints: <Buffer ...>
  }
});
Событие: '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
  • <строка> | <Буфер>

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

readStream.pending
Добавлен в: v11.2.0, v10.16.0
  • <логическое значение>

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

Класс: fs.Stats

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

Добавлены времена как числа.

v0.1.21

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

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

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

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 }

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 }
stats.isBlockDevice()
Добавлен в: v0.1.10
  • Возвращает: <логическое значение>

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

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

Возвращает 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>

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

stats.blksize
  • <number> | <bigint>

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

stats.blocks
  • <number> | <bigint>

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

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

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

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

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

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

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

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

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

stats.atimeNs
Добавлен в: v12.10.0
  • <bigint>

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

stats.mtimeNs
Добавлен в: v12.10.0
  • <bigint>

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

stats.ctimeNs
Добавлен в: v12.10.0
  • <bigint>

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

stats.birthtimeNs
Добавлен в: v12.10.0
  • <bigint>

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

stats.atime
Добавлен в: v0.11.13
  • <Date>

Маркер времени последнего доступа к файлу.

stats.mtime
Добавлен в: v0.11.13
  • <Date>

Маркер времени последнего изменения файла.

stats.ctime
Добавлен в: v0.11.13
  • <Date>

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

stats.birthtime
Добавлен в: v0.11.13
  • <Date>

Маркер времени создания файла.

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

Свойства atimeMs, mtimeMs, ctimeMs, birthtimeMs представляют собой числовые значения, хранящие соответствующее время в миллисекундах. Их точность зависит от платформы. Если в метод, генерирующий объект, передано значение bigint: true, свойства будут bigints, в противном случае — числа.

Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs являются bigints, хранящими соответствующее время в наносекундах. Они присутствуют только в том случае, если в метод, генерирующий объект, передано значение bigint: true. Их точность зависит от платформы.

atime, mtime, ctime, и birthtime являются альтернативными представлениями объекта Date для различных временных значений. Значения Date и числовые значения не связаны. Присвоение нового числового значения или изменение значения Date не отразится на соответствующем альтернативном представлении.

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

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

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

Класс: 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.

Не все константы будут доступны на всех операционных системах.

Для использования нескольких констант используйте оператор побитового ИЛИ |.

Пример:

import { open, constants } from 'fs';

const {
  O_RDWR,
  O_CREAT,
  O_EXCL
} = constants;

open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
  // ...
});
Константы доступа к файлам

Следующие константы предназначены для использования с fs.access().

Константа Описание
F_OK Флаг, указывающий, что файл виден вызывающему процессу. Это полезно для определения существования файла, но ничего не говорит о правах rwx. Значение по умолчанию, если режим не указан.
R_OK Флаг, указывающий, что вызывающий процесс может читать файл.
W_OK Флаг, указывающий, что вызывающий процесс может писать в файл.
X_OK Флаг, указывающий, что вызывающий процесс может выполнять файл. Это не влияет на Windows (будет работать как fs.constants.F_OK).
Константы копирования файлов

Следующие константы предназначены для использования с fs.copyFile().

Константа Описание
COPYFILE_EXCL Если присутствует, операция копирования завершится ошибкой, если целевой путь уже существует.
COPYFILE_FICLONE Если присутствует, операция копирования попытается создать ссылку с копированием при записи. Если базовая платформа не поддерживает копирование при записи, то используется механизм копирования по умолчанию.
COPYFILE_FICLONE_FORCE Если присутствует, операция копирования попытается создать ссылку с копированием при записи. Если базовая платформа не поддерживает копирование при записи, то операция завершится ошибкой.
Константы открытия файлов

Следующие константы предназначены для использования с 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. В других операционных системах этот флаг игнорируется.
Типы файлов (константы)

Следующие константы предназначены для использования со свойством mode объекта <fs.Stats> для определения типа файла.

Постоянная Описание
S_IFMT Маска битов, используемая для извлечения кода типа файла.
S_IFREG Константа типа файла для обычного файла.
S_IFDIR Константа типа файла для каталога.
S_IFCHR Константа типа файла для символьного устройства.
S_IFBLK Константа типа файла для блочного устройства.
S_IFIFO Константа типа файла для FIFO/каналы.
S_IFLNK Константа типа файла для символической ссылки.
S_IFSOCK Константа типа файла для сокета.
Константы режимов файла

Следующие константы предназначены для использования со свойством 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 Режим файла, указывающий на выполнение для других.

Примечания

Порядок выполнения операций с обратными вызовами и промисами

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

Например, следующее подвержено ошибкам, так как операция fs.stat() может завершиться до операции fs.rename():

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

Важно правильно упорядочить операции, ожидая результатов одной перед вызовом другой:

Модули MJS

import { rename, stat } from 'fs/promises';

const from = '/tmp/hello';
const to = '/tmp/world';

try {
  await rename(from, to);
  const stats = await stat(to);
  console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
  console.error('there was an error:', error.message);
}

Модули CJS

const { rename, stat } = require('fs/promises');

(async function(from, to) {
  try {
    await rename(from, to);
    const stats = await stat(to);
    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 '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('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 принимают пути к файлам, которые могут быть заданы в виде строки, объекта <Буфер> или объекта <URL> с использованием протокола file:.

Пути в виде строк

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

Пример использования абсолютного пути в POSIX:

import { open } from 'fs/promises';

let fd;
try {
  fd = await open('/open/some/file.txt', 'r');
  // Do something with the file
} finally {
  await fd.close();
}

Пример использования относительного пути в POSIX (относительно process.cwd()):

import { open } from 'fs/promises';

let fd;
try {
  fd = await open('file.txt', 'r');
  // Do something with the file
} finally {
  await fd.close();
}
Пути к файлам в виде URL
Добавлен в: v7.6.0

Для большинства функций модуля fs, аргумент path или filename может быть передан в виде объекта <URL> с использованием протокола file:.

import { readFileSync } from 'fs';

readFileSync(new URL('file:///tmp/hello'));

file: URL всегда являются абсолютными путями.

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

В Windows, file: <URL> с именем хоста преобразуются в UNC-пути, в то время как file: <URL> с буквами диска преобразуются в абсолютные локальные пути. file: <URL> без имени хоста и буквы диска приведут к ошибке:

import { readFileSync } from '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

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

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

import { readFileSync } from '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'));

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

import { readFileSync } from '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 */

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

import { readFileSync } from '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 */
Пути в виде буферов

Пути, заданные с помощью <Буфера>, полезны в первую очередь на некоторых операционных системах POSIX, которые рассматривают пути к файлам как необработанные последовательности байтов. В таких системах возможно, что один путь к файлу содержит подпоследовательности, использующие несколько кодировок символов. Как и пути в виде строк, пути в виде <Буфера> могут быть относительными или абсолютными:

Пример использования абсолютного пути в POSIX:

import { open } from 'fs/promises';
import { Buffer } from 'buffer';

let fd;
try {
  fd = await open(Buffer.from('/open/some/file.txt'), 'r');
  // Do something with the file
} finally {
  await fd.close();
}
Рабочие каталоги для каждого диска в Windows

В Windows Node.js использует концепцию рабочих каталогов для каждого диска. Это поведение можно наблюдать при использовании пути к диску без обратного слеша. Например, fs.readdirSync('C:\\') потенциально может вернуть другой результат, чем fs.readdirSync('C:'). Дополнительную информацию см. на странице MSDN здесь.

Дескрипторы файлов

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

Методы с обратными вызовами fs.open() и синхронные методы fs.openSync() открывают файл и выделяют новый дескриптор файла. После выделения дескриптор может быть использован для чтения данных из файла, записи в файл или запроса информации о файле.

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

import { open, close, fstat } from '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;
  }
});

API с промисами используют объект <Дескриптор файла> вместо числового дескриптора. Эти объекты лучше управляются системой, чтобы гарантировать, что ресурсы не утекут. Однако все равно требуется закрывать их после завершения операций:

import { open } from 'fs/promises';

let file;
try {
  file = await open('/open/some/file.txt', 'r');
  const stat = await file.stat();
  // use stat
} finally {
  await file.close();
}

Использование пула потоков

Все API файловой системы с обратными вызовами и промисами (за исключением fs.FSWatcher()) используют пул потоков libuv. Это может иметь неожиданные и негативные последствия для производительности некоторых приложений. Дополнительную информацию см. в документации UV_THREADPOOL_SIZE.

Флаги файловой системы

Следующие флаги доступны там, где опция flag принимает строку.

  • 'a': Открытие файла для добавления. Файл создается, если он не существует.

  • 'ax': Как 'a' но возвращает ошибку, если файл уже существует.

  • 'a+': Открытие файла для чтения и добавления. Файл создается, если он не существует.

  • 'ax+': Как 'a+' но возвращает ошибку, если файл уже существует.

  • 'as': Открытие файла для добавления в синхронном режиме. Файл создается, если он не существует.

  • 'as+': Открытие файла для чтения и добавления в синхронном режиме. Файл создается, если он не существует.

  • 'r': Открытие файла для чтения. Возникает исключение, если файл не существует.

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

В Windows открытие существующего скрытого файла с использованием флага 'w' (либо через fs.open() или fs.writeFile() или fsPromises.open()) завершится ошибкой EPERM. Существующие скрытые файлы могут быть открыты для записи с флагом 'r+'.

Вызов fs.ftruncate() или filehandle.truncate() может быть использован для сброса содержимого файла.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v16.x/docs/api/fs.html

Spec-Zone.ru

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