Файловая система¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:fs позволяет взаимодействовать с файловой системой по образцу стандартных функций POSIX.
Чтобы использовать API на основе промисов:
1 | |
1 | |
Чтобы использовать API с обратным вызовом и синхронные API:
1 | |
1 | |
Все операции с файловой системой доступны в синхронной форме, с обратным вызовом и в виде промисов, и их можно вызывать как из CommonJS, так и из модулей ES (ESM).
Пример с промисами¶
Операции на промисах возвращают промис, который выполняется, когда асинхронная операция завершена.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 | |
Пример с обратным вызовом¶
В форме с обратным вызовом последним аргументом передаётся функция завершения; операция выполняется асинхронно. Набор аргументов, передаваемых в эту функцию, зависит от метода, но первый аргумент всегда зарезервирован под исключение. Если операция завершилась успешно, первым аргументом будет null или undefined.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Варианты API модуля node:fs с обратным вызовом предпочтительнее промисов, когда нужна максимальная производительность (и по времени выполнения, и по выделению памяти).
Синхронный пример¶
Синхронные API блокируют цикл событий Node.js и дальнейшее выполнение JavaScript до завершения операции. Исключения выбрасываются сразу; их можно обработать в try…catch или позволить всплыть.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
API промисов (fs/promises)¶
API fs/promises предоставляет асинхронные методы файловой системы, возвращающие промисы.
Эти API используют встроенный пул потоков Node.js для выполнения операций с файловой системой вне потока цикла событий. Они не синхронизированы и не рассчитаны на многопоточную безопасность. При нескольких одновременных изменениях одного и того же файла возможна порча данных — действуйте осторожно.
Класс: FileHandle¶
Объект FileHandle — обёртка над числовым дескриптором файла.
Экземпляры FileHandle создаются методом fsPromises.open().
Все объекты FileHandle являются EventEmitter.
Если FileHandle не закрыть через filehandle.close(), среда попытается автоматически закрыть дескриптор и выдать предупреждение процессу, чтобы уменьшить риск утечек памяти. На такое поведение полагаться не следует: оно может сработать ненадёжно, и файл может остаться открытым. Всегда явно закрывайте FileHandle. В будущем Node.js может изменить эту логику.
Событие: 'close'¶
Событие 'close' генерируется, когда FileHandle закрыт и больше использоваться не может.
filehandle.appendFile(data[, options])¶
data<string>|<Buffer>|<TypedArray>|<DataView>|<AsyncIterable>|<Iterable>|<Stream>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'signal<AbortSignal>| undefined позволяет прервать выполняющуюся операциюwriteFile. По умолчанию:undefined
- Возвращает:
<Promise>при успехе выполняется сundefined.
Псевдоним filehandle.writeFile().
При работе с дескриптором файла режим нельзя изменить относительно того, что был задан при fsPromises.open(). Поэтому метод эквивалентен filehandle.writeFile().
filehandle.chmod(mode)¶
mode<integer>битовая маска режима файла.- Возвращает:
<Promise>при успехе выполняется сundefined.
Изменяет права доступа к файлу. См. chmod(2).
filehandle.chown(uid, gid)¶
uid<integer>идентификатор пользователя — нового владельца файла.gid<integer>идентификатор группы — новой группы файла.- Возвращает:
<Promise>при успехе выполняется сundefined.
Меняет владельца файла. Обёртка над chown(2).
filehandle.close()¶
- Возвращает:
<Promise>при успехе выполняется сundefined.
Закрывает дескриптор после завершения всех отложенных операций над ним.
1 2 3 4 5 6 7 8 | |
filehandle.createReadStream([options])¶
options<Object>- Возвращает:
<fs.ReadStream>
В options можно задать start и end, чтобы прочитать диапазон байт вместо всего файла. Оба значения включаются в диапазон, отсчёт с 0; допустимый диапазон — [0, Number.MAX_SAFE_INTEGER]. Если start опущен или undefined, filehandle.createReadStream() читает последовательно с текущей позиции в файле. Для encoding допустимы те же значения, что принимает Buffer.
Если FileHandle указывает на символьное устройство с только блокирующим чтением (например клавиатуру или звуковую карту), чтение не завершится, пока не появятся данные. Из-за этого процесс может не завершиться, а поток — не закрыться естественным образом.
По умолчанию поток сгенерирует событие 'close' после уничтожения. Чтобы изменить поведение, установите emitClose в false.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Если autoClose равен false, дескриптор файла не закрывается даже при ошибке. Закрыть его и убедиться в отсутствии утечки дескрипторов — ответственность приложения. Если autoClose равен true (по умолчанию), при 'error' или 'end' дескриптор закрывается автоматически.
Пример: прочитать последние 10 байт файла длиной 100 байт:
1 2 3 4 | |
filehandle.createWriteStream([options])¶
options<Object>- Возвращает:
<fs.WriteStream>
В options также может быть указан start для записи с позиции после начала файла; допустимые значения в диапазоне [0, Number.MAX_SAFE_INTEGER]. Чтобы изменять файл, а не заменять его целиком, для open может понадобиться флаг r+ вместо r по умолчанию. Для encoding допустимы те же значения, что принимает Buffer.
Если autoClose равен true (по умолчанию), при 'error' или 'finish' дескриптор закрывается автоматически. Если autoClose равен false, дескриптор не закрывается даже при ошибке. Закрыть его и избежать утечки дескрипторов — задача приложения.
По умолчанию поток сгенерирует событие 'close' после уничтожения. Чтобы изменить поведение, установите emitClose в false.
filehandle.datasync()¶
- Возвращает:
<Promise>при успехе выполняется сundefined.
Переводит все отложенные операции ввода-вывода для этого файла в состояние завершённой синхронизированной записи ОС. Подробности см. в документации POSIX fdatasync(2).
В отличие от filehandle.sync, этот метод не сбрасывает изменённые метаданные.
filehandle.fd¶
- Тип:
<number>числовой дескриптор файла, которым управляет объект FileHandle.
filehandle.pull([...transforms][, options])¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
...transforms<Function>|<Object>необязательные преобразования черезstream/iter pull().options<Object>signal<AbortSignal>autoClose<boolean>закрыть дескриптор файла по окончании потока. По умолчанию:false.start<number>смещение в байтах, с которого начинать чтение. Если задано, используется явное позиционирование (семантикаpread). По умолчанию: текущая позиция в файле.limit<number>максимум байт для чтения до завершения итератора. Чтение останавливается, когда переданоlimitбайт или достигнут конец файла — в зависимости от того, что наступит раньше. По умолчанию: до конца файла.chunkSize<number>размер буфера в байтах для каждой операции чтения. По умолчанию:131072(128 КиБ).
- Возвращает:
<AsyncIterable<Uint8Array[]>>
Возвращает содержимое файла как асинхронный итерируемый объект по модели pull из node:stream/iter. Чтение идёт блоками по chunkSize байт (по умолчанию 128 КиБ). Если заданы преобразования, они применяются через stream/iter pull().
Пока итерируемый объект потребляется, дескриптор файла заблокирован; разблокировка — по завершении итерации, при ошибке или при прерывании потребителем.
Функция доступна только при включённом флаге --experimental-stream-iter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
filehandle.pullSync([...transforms][, options])¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
...transforms<Function>|<Object>необязательные преобразования черезstream/iter pullSync().options<Object>autoClose<boolean>закрыть дескриптор файла по окончании потока. По умолчанию:false.start<number>смещение в байтах для начала чтения. Если задано, используется явное позиционирование. По умолчанию: текущая позиция в файле.limit<number>максимум байт до завершения итератора. По умолчанию: до конца файла.chunkSize<number>размер буфера в байтах для каждой операции чтения. По умолчанию:131072(128 КиБ).
- Возвращает:
<Iterable<Uint8Array[]>>
Синхронный аналог filehandle.pull(). Возвращает синхронный итерируемый объект, который читает файл синхронным вводом-выводом в основном потоке. Чтение идёт блоками по chunkSize байт (по умолчанию 128 КиБ).
Пока итерируемый объект потребляется, дескриптор файла заблокирован. В отличие от асинхронного pull(), AbortSignal не поддерживается — все операции синхронны.
Функция доступна только при включённом флаге --experimental-stream-iter.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
filehandle.read(buffer, offset, length, position)¶
buffer<Buffer>|<TypedArray>|<DataView>Буфер, в который будут помещены считанные из файла данные.offset<integer>Позиция в буфере, начиная с которой нужно заполнять данные. По умолчанию:0length<integer>Количество байт для чтения. По умолчанию:buffer.byteLength - offsetposition<integer>|<bigint>| null Позиция в файле, с которой следует начать чтение данных. Еслиnullили-1, данные читаются из текущей позиции файла, и эта позиция будет обновлена. Еслиpositionявляется неотрицательным целым числом, текущая позиция файла останется неизменной. По умолчанию:null- Возвращает:
<Promise>При успешном выполнении исполняется объектом с двумя свойствами:bytesRead<integer>Количество прочитанных байтbuffer<Buffer>|<TypedArray>|<DataView>Ссылка на переданный аргументbuffer.
Читает данные из файла и помещает их в переданный буфер.
Если файл не изменяется параллельно, конец файла достигается, когда число прочитанных байт равно нулю.
filehandle.read([options])¶
options<Object>buffer<Buffer>|<TypedArray>|<DataView>Буфер, в который будут помещены считанные из файла данные. По умолчанию:Buffer.alloc(16384)offset<integer>Позиция в буфере, начиная с которой нужно заполнять данные. По умолчанию:0length<integer>Количество байт для чтения. По умолчанию:buffer.byteLength - offsetposition<integer>|<bigint>| null Позиция в файле, с которой следует начать чтение данных. Еслиnullили-1, данные читаются из текущей позиции файла, и эта позиция будет обновлена. Еслиpositionявляется неотрицательным целым числом, текущая позиция файла останется неизменной. По умолчанию:null
- Возвращает:
<Promise>При успешном выполнении исполняется объектом с двумя свойствами:bytesRead<integer>Количество прочитанных байтbuffer<Buffer>|<TypedArray>|<DataView>Ссылка на переданный аргументbuffer.
Читает данные из файла и помещает их в переданный буфер.
Если файл не изменяется параллельно, конец файла достигается, когда число прочитанных байт равно нулю.
filehandle.read(buffer[, options])¶
buffer<Buffer>|<TypedArray>|<DataView>Буфер, в который будут помещены считанные из файла данные.options<Object>offset<integer>Позиция в буфере, начиная с которой нужно заполнять данные. По умолчанию:0length<integer>Количество байт для чтения. По умолчанию:buffer.byteLength - offsetposition<integer>|<bigint>| null Позиция в файле, с которой следует начать чтение данных. Еслиnullили-1, данные читаются из текущей позиции файла, и эта позиция будет обновлена. Еслиpositionявляется неотрицательным целым числом, текущая позиция файла останется неизменной. По умолчанию:null
- Возвращает:
<Promise>При успешном выполнении исполняется объектом с двумя свойствами:bytesRead<integer>Количество прочитанных байтbuffer<Buffer>|<TypedArray>|<DataView>Ссылка на переданный аргументbuffer.
Читает данные из файла и помещает их в переданный буфер.
Если файл не изменяется параллельно, конец файла достигается, когда число прочитанных байт равно нулю.
filehandle.readableWebStream([options])¶
options<Object>autoClose<boolean>Еслиtrue, FileHandle будет закрыт при закрытии потока. По умолчанию:false
- Возвращает:
<ReadableStream>
Возвращает байтовый ReadableStream для чтения содержимого файла.
Будет выброшена ошибка, если метод вызван более одного раза или после закрытия либо в процессе закрытия FileHandle.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
Хотя ReadableStream прочитает файл до конца, он не закроет FileHandle автоматически. Пользовательский код всё равно должен вызвать метод fileHandle.close(), если только опция autoClose не установлена в true.
filehandle.readFile(options)¶
options<Object>|<string>encoding<string>| null По умолчанию:nullsignal<AbortSignal>позволяет прервать выполняющийсяreadFile
- Возвращает:
<Promise>При успешном выполнении исполняется содержимым файла. Если кодировка не указана (черезoptions.encoding), данные возвращаются как объект Buffer. В противном случае это будет строка.
Асинхронно читает всё содержимое файла.
Если options — строка, она задаёт encoding.
FileHandle должен поддерживать чтение.
Если для файлового дескриптора был выполнен один или несколько вызовов filehandle.read(), а затем вызывается filehandle.readFile(), данные будут прочитаны от текущей позиции до конца файла. Чтение не всегда начинается с начала файла.
filehandle.readLines([options])¶
options<Object>- Возвращает:
<readline.InterfaceConstructor>
Вспомогательный метод для создания интерфейса readline и потокового чтения файла. Описание параметров см. в filehandle.createReadStream().
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 | |
filehandle.readv(buffers[, position])¶
buffers<Buffer[]>|<TypedArray[]>|<DataView[]>position<integer>| null Смещение от начала файла, с которого нужно читать данные. Еслиpositionне являетсяnumber, данные будут читаться из текущей позиции. По умолчанию:null- Возвращает:
<Promise>При успешном выполнении исполняется объектом с двумя свойствами:bytesRead<integer>Количество прочитанных байтbuffers<Buffer[]>|<TypedArray[]>|<DataView[]>Свойство, содержащее ссылку на входной аргументbuffers.
Читает данные из файла и записывает их в массив объектов ArrayBufferView.
filehandle.stat([options])¶
options<Object>bigint<boolean>Должны ли числовые значения в возвращаемом объекте fs.Stats бытьbigint. По умолчанию:false.signal<AbortSignal>AbortSignal для отмены операции. По умолчанию:undefined.
- Возвращает:
<Promise>При успешном выполнении исполняется объектом fs.Stats для файла.
filehandle.sync()¶
- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Запрашивает сброс всех данных для открытого файлового дескриптора на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Подробнее см. документацию POSIX для fsync(2).
filehandle.truncate(len)¶
len<integer>По умолчанию:0- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Усекает файл.
Если файл был больше len байт, в нём будут сохранены только первые len байт.
Следующий пример сохраняет только первые четыре байта файла:
1 2 3 4 5 6 7 8 9 | |
Если ранее файл был короче len байт, он будет расширен, а добавленная часть будет заполнена нулевыми байтами ('\0'):
Если len отрицателен, будет использовано значение 0.
filehandle.utimes(atime, mtime)¶
Изменяет временные метки файловой системы для объекта, на который ссылается FileHandle, и при успешном выполнении исполняет промис без аргументов.
filehandle.write(buffer, offset[, length[, position]])¶
buffer<Buffer>|<TypedArray>|<DataView>offset<integer>Начальная позиция внутриbuffer, откуда начинаются данные для записи.length<integer>Количество байт изbuffer, которые нужно записать. По умолчанию:buffer.byteLength - offsetposition<integer>| null Смещение от начала файла, куда должны быть записаны данные изbuffer. Еслиpositionне являетсяnumber, данные будут записаны в текущую позицию. Подробнее см. POSIXpwrite(2). По умолчанию:null- Возвращает:
<Promise>
Записывает buffer в файл.
Промис выполняется объектом с двумя свойствами:
bytesWritten<integer>Количество записанных байтbuffer<Buffer>|<TypedArray>|<DataView>Ссылка на записанныйbuffer.
Небезопасно вызывать filehandle.write() несколько раз для одного и того же файла, не дожидаясь выполнения (или отклонения) промиса. Для такого сценария используйте filehandle.createWriteStream().
В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
filehandle.write(buffer[, options])¶
buffer<Buffer>|<TypedArray>|<DataView>options<Object>- Возвращает:
<Promise>
Записывает buffer в файл.
Подобно описанной выше функции filehandle.write, эта версия принимает необязательный объект options. Если объект options не указан, используются приведённые выше значения по умолчанию.
filehandle.write(string[, position[, encoding]])¶
string<string>position<integer>| null Смещение от начала файла, куда должны быть записаны данные изstring. Еслиpositionне являетсяnumber, данные будут записаны в текущую позицию. Подробнее см. POSIXpwrite(2). По умолчанию:nullencoding<string>Ожидаемая кодировка строки. По умолчанию:'utf8'- Возвращает:
<Promise>
Записывает string в файл. Если string не является строкой, промис будет отклонён с ошибкой.
Промис выполняется объектом с двумя свойствами:
Небезопасно вызывать filehandle.write() несколько раз для одного и того же файла, не дожидаясь выполнения (или отклонения) промиса. Для такого сценария используйте filehandle.createWriteStream().
В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
filehandle.writeFile(data, options)¶
data<string>|<Buffer>|<TypedArray>|<DataView>|<AsyncIterable>|<Iterable>|<Stream>options<Object>|<string>encoding<string>| null Ожидаемая кодировка символов, когдаdataявляется строкой. По умолчанию:'utf8'signal<AbortSignal>| undefined позволяет прервать выполняющийсяwriteFile. По умолчанию:undefined
- Возвращает:
<Promise>
Асинхронно записывает данные в файл, заменяя файл, если он уже существует. data может быть строкой, буфером, объектом AsyncIterable или Iterable. При успехе промис выполняется без аргументов.
Если options — строка, она задаёт encoding.
FileHandle должен поддерживать запись.
Небезопасно вызывать filehandle.writeFile() несколько раз для одного и того же файла, не дожидаясь выполнения (или отклонения) промиса.
Если для файлового дескриптора был выполнен один или несколько вызовов filehandle.write(), а затем вызывается filehandle.writeFile(), данные будут записаны от текущей позиции до конца файла. Запись не всегда начинается с начала файла.
filehandle.writev(buffers[, position])¶
buffers<Buffer[]>|<TypedArray[]>|<DataView[]>position<integer>| null Смещение от начала файла, куда должны быть записаны данные изbuffers. Еслиpositionне являетсяnumber, данные будут записаны в текущую позицию. По умолчанию:null- Возвращает:
<Promise>
Записывает массив объектов ArrayBufferView в файл.
Промис выполняется объектом с двумя свойствами:
bytesWritten<integer>Количество записанных байтbuffers<Buffer[]>|<TypedArray[]>|<DataView[]>Ссылка на входной аргументbuffers.
Небезопасно вызывать writev() несколько раз для одного и того же файла, не дожидаясь выполнения (или отклонения) промиса.
В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
filehandle.writer([options])¶
Стабильность: 1 - Экспериментальная
options<Object>autoClose<boolean>Закрывать файловый дескриптор, когда writer завершает работу или переходит в состояние ошибки. По умолчанию:false.start<number>Смещение в байтах, с которого нужно начинать запись. Если указано, запись использует явное позиционирование. По умолчанию: текущая позиция файла.limit<number>Максимальное число байт, которое writer примет. Асинхронные записи (write(),writev()), превышающие лимит, отклоняются сERR_OUT_OF_RANGE. Синхронные записи (writeSync(),writevSync()) возвращаютfalse. По умолчанию: без ограничений.chunkSize<number>Максимальный размер чанка в байтах для синхронных операций записи. Записи больше этого порога переводятся на асинхронный ввод-вывод. Для оптимальной производительностиpipeTo()установите значение, совпадающее сchunkSizeу reader. По умолчанию:131072(128 KB).
- Возвращает:
<Object>write(chunk[, options])<Function>Возвращает<Promise<void>>. ПринимаетUint8Array,Bufferили строку (в кодировке UTF-8).chunk<Buffer>|<TypedArray>|<DataView>|<string>options<Object>signal<AbortSignal>Если сигнал уже прерван, запись отклоняется сAbortErrorбез выполнения ввода-вывода.
writev(chunks[, options])<Function>Возвращает<Promise<void>>. Использует scatter/gather I/O через один системный вызовwritev(). Принимает массивы с элементами смешанных типовUint8Array/string.chunks<Array<Buffer|TypedArray|DataView|string>>options<Object>signal<AbortSignal>Если сигнал уже прерван, запись отклоняется сAbortErrorбез выполнения ввода-вывода.
writeSync(chunk)<Function>Возвращает boolean. Пытается выполнить синхронную запись. Возвращаетtrue, если запись успешна, иfalse, если вызывающему коду следует перейти на асинхронныйwrite().falseвозвращается, когда writer закрыт/в состоянии ошибки, когда асинхронная операция уже выполняется, когда размер чанка превышаетchunkSizeили когда запись превысила быlimit.chunk<Buffer>|<TypedArray>|<DataView>|<string>
writevSync(chunks)<Function>Возвращает boolean. Синхронная пакетная запись. Семантика переключения на запасной вариант такая же, как уwriteSync().end([options])<Function>Возвращает<Promise<number>>с общим числом записанных байт. Идемпотентен: возвращаетtotalBytesWritten, если уже закрыт, и возвращает ожидающий промис, если уже находится в процессе закрытия. Отклоняется, если writer находится в состоянии ошибки.options<Object>signal<AbortSignal>Если сигнал уже прерван,end()отклоняется сAbortError, а writer остаётся открытым.
endSync()<Function>Возвращает number | number: общее число записанных байт при успехе или-1, если writer находится в состоянии ошибки либо выполняется асинхронная операция. Идемпотентен, если уже закрыт.fail(reason)<Function>Переводит writer в конечное состояние ошибки. Синхронный метод. Если writer уже закрыт или находится в состоянии ошибки, ничего не делает. ЕслиautoCloseравноtrue, синхронно закрывает файловый дескриптор.
Возвращает writer из node:stream/iter, работающий поверх данного файлового дескриптора.
Writer поддерживает как Symbol.asyncDispose, так и Symbol.dispose:
await using w = fh.writer()— if the writer is still open (noend()called),asyncDisposecallsfail(). Ifend()is pending, it waits for it to complete.using w = fh.writer()— callsfail()unconditionally.
Методы writeSync() и writevSync() включают быстрый try-sync путь, используемый stream/iter pipeTo(). Когда размер чанка reader совпадает с chunkSize у writer, все записи в конвейере pipeTo() завершаются синхронно без накладных расходов на промисы.
Эта функция доступна только при включённом флаге --experimental-stream-iter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
filehandle[Symbol.asyncDispose]()¶
Вызывает filehandle.close() и возвращает промис, который исполняется, когда filehandle закрыт.
fsPromises.access(path[, mode])¶
path<string>|<Buffer>|<URL>mode<integer>По умолчанию:fs.constants.F_OK- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Проверяет права пользователя на файл или каталог, указанный в path. Аргумент mode — необязательное целое число, задающее проверки доступности, которые нужно выполнить. mode должен быть либо значением fs.constants.F_OK, либо маской, составленной побитовым ИЛИ из fs.constants.R_OK, fs.constants.W_OK и fs.constants.X_OK (например, fs.constants.W_OK | fs.constants.R_OK). Возможные значения mode см. в константах доступа к файлам.
Если проверка доступности успешна, промис выполняется без значения. Если какая-либо из проверок завершится неудачей, промис будет отклонён объектом Error. Следующий пример проверяет, может ли текущий процесс читать и записывать файл /etc/passwd.
1 2 3 4 5 6 7 8 | |
Не рекомендуется использовать fsPromises.access() для проверки доступности файла перед вызовом fsPromises.open(). Это создаёт состояние гонки, поскольку между двумя вызовами другие процессы могут изменить состояние файла. Вместо этого пользовательский код должен сразу открывать, читать или записывать файл и обрабатывать ошибку, если файл недоступен.
fsPromises.appendFile(path, data[, options])¶
path<string>|<Buffer>|<URL>|<FileHandle>Имя файла или FileHandledata<string>|<Buffer>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>См. поддержку файловыхflags. По умолчанию:'a'.flush<boolean>Еслиtrue, базовый файловый дескриптор будет сброшен перед закрытием. По умолчанию:false.
- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Асинхронно добавляет данные в файл, создавая файл, если он ещё не существует. data может быть строкой или Buffer.
Если options — строка, она задаёт encoding.
Опция mode влияет только на вновь создаваемый файл. Подробнее см. fs.open().
path может быть задан как FileHandle, открытый для добавления (через fsPromises.open()).
fsPromises.chmod(path, mode)¶
path<string>|<Buffer>|<URL>mode<string>|<integer>- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Изменяет права доступа к файлу.
fsPromises.chown(path, uid, gid)¶
path<string>|<Buffer>|<URL>uid<integer>gid<integer>- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Изменяет владельца файла.
fsPromises.copyFile(src, dest[, mode])¶
src<string>|<Buffer>|<URL>Имя исходного файла для копированияdest<string>|<Buffer>|<URL>Имя файла назначения для операции копированияmode<integer>Необязательные модификаторы, задающие поведение операции копирования. Можно создать маску, состоящую из побитового ИЛИ двух или более значений (например,fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE) По умолчанию:0.fs.constants.COPYFILE_EXCL: Операция копирования завершится ошибкой, еслиdestуже существует.fs.constants.COPYFILE_FICLONE: Операция копирования попытается создать reflink по схеме copy-on-write. Если платформа не поддерживает copy-on-write, будет использован резервный механизм копирования.fs.constants.COPYFILE_FICLONE_FORCE: Операция копирования попытается создать reflink по схеме copy-on-write. Если платформа не поддерживает copy-on-write, операция завершится ошибкой.
- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Асинхронно копирует src в dest. По умолчанию dest будет перезаписан, если уже существует.
Никаких гарантий атомарности операции копирования не даётся. Если после открытия файла назначения для записи произойдёт ошибка, будет предпринята попытка удалить файл назначения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
fsPromises.cp(src, dest[, options])¶
src<string>|<URL>Исходный путь для копирования.dest<string>|<URL>Путь назначения для копирования.options<Object>dereference<boolean>Разыменовывать символические ссылки. По умолчанию:false.errorOnExist<boolean>Еслиforceравноfalseи место назначения существует, выбрасывать ошибку. По умолчанию:false.filter<Function>Функция для фильтрации копируемых файлов и каталогов. Вернитеtrue, чтобы скопировать элемент, иfalse, чтобы его проигнорировать. Если игнорируется каталог, всё его содержимое также будет пропущено. Может также возвращатьPromise, который разрешается вtrueилиfalseПо умолчанию:undefined.force<boolean>Перезаписывать существующий файл или каталог. Операция копирования будет игнорировать ошибки, если установитьfalse, а место назначения уже существует. Используйте опциюerrorOnExist, чтобы изменить это поведение. По умолчанию:true.mode<integer>Модификаторы операции копирования. По умолчанию:0. См. флагmodeуfsPromises.copyFile().preserveTimestamps<boolean>Еслиtrue, временные метки изsrcбудут сохранены. По умолчанию:false.recursive<boolean>Копировать каталоги рекурсивно. По умолчанию:falseverbatimSymlinks<boolean>Еслиtrue, разрешение путей для символических ссылок будет пропущено. По умолчанию:false
- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Асинхронно копирует всю структуру каталога из src в dest, включая подкаталоги и файлы.
При копировании одного каталога в другой globs не поддерживаются, а поведение аналогично cp dir1/ dir2/.
fsPromises.glob(pattern[, options])¶
pattern<string>|<string[]>options<Object>cwd<string>|<URL>Текущий рабочий каталог. По умолчанию:process.cwd()exclude<Function>|<string[]>Функция для исключения файлов и каталогов из выборки либо список glob-шаблонов для исключения. Если передана функция, вернитеtrue, чтобы исключить элемент, иfalse, чтобы его включить. По умолчанию:undefined. Если передан массив строк, каждая строка должна быть glob-шаблоном, задающим исключаемые пути. Примечание: шаблоны с отрицанием (например,'!foo.js') не поддерживаются.withFileTypes<boolean>Еслиtrue, glob возвращает пути в виде объектовDirent; еслиfalse— в виде строк. По умолчанию:false.
- Возвращает:
<AsyncIterator>Асинхронный итератор, последовательно отдающий пути к файлам, соответствующим шаблону.
1 2 3 4 | |
1 2 3 4 5 6 | |
fsPromises.lchmod(path, mode)¶
Стабильность: 0 - устарело или набрало много негативных отзывов
path<string>|<Buffer>|<URL>mode<integer>- Возвращает:
<Promise>при успехе выполняется сundefined.
Изменяет права доступа символической ссылки.
Этот метод реализован только в macOS.
fsPromises.lchown(path, uid, gid)¶
path<string>|<Buffer>|<URL>uid<integer>gid<integer>- Возвращает:
<Promise>при успехе выполняется сundefined.
Изменяет владельца символической ссылки.
fsPromises.lutimes(path, atime, mtime)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>- Возвращает:
<Promise>при успехе выполняется сundefined.
Изменяет время доступа и модификации файла так же, как fsPromises.utimes(), с той разницей, что если путь указывает на символическую ссылку, то разыменование не выполняется: вместо этого изменяются временные метки самой символической ссылки.
fsPromises.link(existingPath, newPath)¶
existingPath<string>|<Buffer>|<URL>newPath<string>|<Buffer>|<URL>- Возвращает:
<Promise>при успехе выполняется сundefined.
Создаёт новую жёсткую ссылку с existingPath на newPath. Подробнее см. POSIX link(2).
fsPromises.lstat(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<Promise>при успехе выполняется объектом fs.Stats для указанной символической ссылкиpath.
Эквивалентен fsPromises.stat(), если только path не указывает на символическую ссылку. В этом случае статистика берётся для самой ссылки, а не для файла, на который она указывает. Подробнее см. документацию POSIX lstat(2).
fsPromises.mkdir(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>|<integer>recursive<boolean>По умолчанию:falsemode<string>|<integer>не поддерживается в Windows. Подробнее см. Режимы файла. По умолчанию:0o777.
- Возвращает:
<Promise>при успехе выполняется сundefined, еслиrecursiveравноfalse, или с путём первого созданного каталога, еслиrecursiveравноtrue.
Асинхронно создаёт каталог.
Необязательный аргумент options может быть целым числом, задающим mode (права доступа и sticky-биты), либо объектом со свойствами mode и recursive, указывающим, нужно ли создавать родительские каталоги. Вызов fsPromises.mkdir() с path, который уже существует как каталог, приводит к отклонению промиса только когда recursive равно false.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
fsPromises.mkdtemp(prefix[, options])¶
prefix<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<Promise>при успехе выполняется строкой, содержащей путь файловой системы к только что созданному временному каталогу.
Создаёт уникальный временный каталог. Уникальное имя каталога формируется добавлением шести случайных символов в конец переданного prefix. Из-за различий между платформами избегайте завершающих символов X в prefix. Некоторые платформы, особенно BSD, могут возвращать более шести случайных символов и заменять завершающие X в prefix случайными символами.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим используемую кодировку символов.
1 2 3 4 5 6 7 8 9 | |
Метод fsPromises.mkdtemp() добавляет шесть случайно выбранных символов непосредственно к строке prefix. Например, если дан каталог /tmp и требуется создать временный каталог внутри /tmp, prefix должен заканчиваться завершающим платформенно-зависимым разделителем пути (require('node:path').sep).
fsPromises.mkdtempDisposable(prefix[, options])¶
prefix<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<Promise>при успехе выполняется промисом для асинхронно освобождаемого объекта:path<string>путь созданного каталогаremove<AsyncFunction>функция, удаляющая созданный каталог[Symbol.asyncDispose]<AsyncFunction>то же самое, чтоremove
Возвращаемый промис содержит асинхронно освобождаемый объект, чьё свойство path хранит путь к созданному каталогу. При освобождении объекта каталог и его содержимое будут удалены асинхронно, если они всё ещё существуют. Если каталог не удаётся удалить, освобождение завершится ошибкой. У объекта есть асинхронный метод remove(), выполняющий ту же задачу.
И эта функция, и функция освобождения у возвращаемого объекта являются асинхронными, поэтому использовать их следует через await + await using, например: await using dir = await fsPromises.mkdtempDisposable('prefix').
Подробнее см. документацию fsPromises.mkdtemp().
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим используемую кодировку символов.
fsPromises.open(path, flags[, mode])¶
path<string>|<Buffer>|<URL>--flags<string>|<number>см. поддержку файловыхflags. По умолчанию:'r'.mode<string>|<integer>задаёт режим файла (права доступа и sticky-биты), если файл создаётся. Подробнее см. Режимы файла. По умолчанию:0o666(доступен для чтения и записи)- Возвращает:
<Promise>при успехе выполняется объектом FileHandle.
Открывает FileHandle.
Подробнее см. документацию POSIX open(2).
Некоторые символы (< > : " / \ | ? *) в Windows зарезервированы, см. Имена файлов, путей и пространств имён. В NTFS, если имя файла содержит двоеточие, Node.js откроет поток файловой системы, как описано на этой странице Microsoft Learn.
fsPromises.opendir(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>encoding<string>| null По умолчанию:'utf8'bufferSize<number>число записей каталога, внутренне буферизуемых при чтении. Более высокие значения улучшают производительность, но увеличивают потребление памяти. По умолчанию:32recursive<boolean>возвращаемыйDirбудет AsyncIterable, содержащим все вложенные файлы и каталоги. По умолчанию:false
- Возвращает:
<Promise>при успехе выполняется объектом fs.Dir.
Асинхронно открывает каталог для последовательного обхода. Подробнее см. POSIX opendir(3).
Создаёт fs.Dir со всеми методами чтения и очистки каталога.
Опция encoding задаёт кодировку для path при открытии и дальнейших операциях чтения.
Пример использования асинхронной итерации:
1 2 3 4 5 6 7 8 9 | |
При использовании асинхронного итератора объект fs.Dir будет автоматически закрыт после завершения итерации.
fsPromises.readdir(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>- Возвращает:
<Promise>при успехе выполняется массивом имён файлов каталога, исключая'.'и'..'.
Читает содержимое каталога.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим кодировку имён файлов. Если encoding установлено в 'buffer', возвращаемые имена файлов будут объектами Buffer.
Если options.withFileTypes установлено в true, возвращаемый массив будет содержать объекты fs.Dirent.
1 2 3 4 5 6 7 8 9 | |
fsPromises.readFile(path[, options])¶
path<string>|<Buffer>|<URL>|<FileHandle>filename orFileHandleoptions<Object>|<string>encoding<string>| null По умолчанию:nullflag<string>См. поддержку файловыхflags. По умолчанию:'r'.signal<AbortSignal>позволяет прервать выполняющийсяreadFile
- Возвращает:
<Promise>При успешном выполнении исполняется содержимым файла.
Асинхронно читает всё содержимое файла.
Если кодировка не указана (через options.encoding), данные возвращаются как объект Buffer. В противном случае это будет строка.
Если options — строка, она задаёт кодировку.
Если path указывает на каталог, поведение fsPromises.readFile() зависит от платформы. В macOS, Linux и Windows промис будет отклонён с ошибкой. В FreeBSD будет возвращено представление содержимого каталога.
Пример чтения файла package.json, расположенного в том же каталоге, что и выполняемый код:
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
Текущий readFile можно прервать с помощью AbortSignal. Если запрос прерван, возвращаемый промис отклоняется с AbortError:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Прерывание текущего запроса не отменяет отдельные запросы операционной системы, а лишь внутреннюю буферизацию, которую выполняет fs.readFile.
Любой указанный FileHandle должен поддерживать чтение.
fsPromises.readlink(path[, options])¶
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])¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<Promise>При успешном выполнении исполняется разрешённым путём.
Определяет фактическое расположение path, используя ту же семантику, что и функция fs.realpath.native().
Поддерживаются только пути, которые можно преобразовать в строки UTF-8.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим кодировку символов для пути. Если encoding установлено в 'buffer', возвращаемый путь будет передан как объект Buffer.
В Linux, когда Node.js слинкован с musl libc, для работы этой функции файловая система procfs должна быть смонтирована в /proc. У glibc такого ограничения нет.
fsPromises.rename(oldPath, newPath)¶
oldPath<string>|<Buffer>|<URL>newPath<string>|<Buffer>|<URL>- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Переименовывает oldPath в newPath.
fsPromises.rmdir(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>в настоящий момент никаких опций не предоставляется. Раньше существовали опцииrecursive,maxBusyTriesиemfileWait, но они были устаревшими и удалены. Аргументoptionsпо-прежнему принимается для обратной совместимости, но не используется.- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Удаляет каталог, указанный в path.
Использование fsPromises.rmdir() для файла (а не каталога) приводит к отклонению промиса с ошибкой ENOENT в Windows и ENOTDIR в POSIX.
Чтобы получить поведение, аналогичное Unix-команде rm -rf, используйте fsPromises.rm() с опциями { recursive: true, force: true }.
fsPromises.rm(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>force<boolean>еслиtrue, исключения игнорируются, еслиpathне существует. По умолчанию:false.maxRetries<integer>если возникает ошибкаEBUSY,EMFILE,ENFILE,ENOTEMPTYилиEPERM, Node.js повторяет операцию, линейно увеличивая ожидание наretryDelayмиллисекунд при каждой попытке. Эта опция задаёт число повторов. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:0.recursive<boolean>еслиtrue, выполняется рекурсивное удаление каталога. В рекурсивном режиме операции повторяются при сбоях. По умолчанию:false.retryDelay<integer>количество миллисекунд ожидания между повторными попытками. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:100.
- Возвращает:
<Promise>при успехе выполняется сundefined.
Удаляет файлы и каталоги (по образцу стандартной POSIX-утилиты rm).
fsPromises.stat(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<Promise>при успехе выполняется объектом fs.Stats для указанногоpath.
fsPromises.statfs(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<Promise>при успехе выполняется объектом fs.StatFs для указанногоpath.
fsPromises.symlink(target, path[, type])¶
target<string>|<Buffer>|<URL>path<string>|<Buffer>|<URL>type<string>| null По умолчанию:null- Возвращает:
<Promise>при успехе выполняется сundefined.
Создаёт символическую ссылку.
Аргумент type используется только в Windows и может иметь одно из значений: 'dir', 'file' или 'junction'. Если type равен null, Node.js автоматически определит тип target и использует 'file' или 'dir'. Если target не существует, будет использовано 'file'. Точки соединения Windows требуют, чтобы путь назначения был абсолютным. При использовании 'junction' аргумент target автоматически нормализуется к абсолютному пути. Точки соединения на томах NTFS могут указывать только на каталоги.
fsPromises.truncate(path[, len])¶
path<string>|<Buffer>|<URL>len<integer>По умолчанию:0- Возвращает:
<Promise>при успехе выполняется сundefined.
Усекает (или увеличивает) длину содержимого по пути path до len байт.
fsPromises.unlink(path)¶
Если path указывает на символическую ссылку, ссылка будет удалена без влияния на файл или каталог, на который она указывает. Если path указывает на путь к файлу, который не является символической ссылкой, файл будет удалён. Подробнее см. POSIX unlink(2).
fsPromises.utimes(path, atime, mtime)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>- Возвращает:
<Promise>При успешном выполнении исполняется значениемundefined.
Изменяет временные метки файловой системы для объекта, на который указывает path.
Аргументы atime и mtime подчиняются следующим правилам:
- Значениями могут быть числа, представляющие время Unix epoch, объекты
Dateили числовые строки вроде'123456789.0'. - Если значение нельзя преобразовать в число либо это
NaN,Infinityили-Infinity, будет выброшенError.
fsPromises.watch(filename[, options])¶
filename<string>|<Buffer>|<URL>options<string>|<Object>persistent<boolean>указывает, должен ли процесс продолжать работу, пока файлы отслеживаются. По умолчанию:true.recursive<boolean>указывает, нужно ли отслеживать все подкаталоги или только текущий каталог. Применяется, когда указан каталог, и только на поддерживаемых платформах (см. предостережения). По умолчанию:false.encoding<string>задаёт кодировку символов, которая будет использоваться для имени файла, передаваемого слушателю. По умолчанию:'utf8'.signal<AbortSignal>AbortSignal, используемый для указания, когда наблюдатель должен остановиться.maxQueue<number>задаёт число событий, которое может быть помещено в очередь между итерациями возвращаемого AsyncIterator. По умолчанию:2048.overflow<string>либо'ignore', либо'throw', когда событий для очереди больше, чем допускаетmaxQueue.'ignore'означает, что события переполнения будут отброшены и будет выдано предупреждение, а'throw'означает выброс исключения. По умолчанию:'ignore'.ignore<string>|<RegExp>|<Function>|<Array>шаблоны для игнорирования. Строки являются glob-шаблонами (с использованиемminimatch), шаблоныRegExpпроверяются по имени файла, а функции получают имя файла и возвращаютtrue, если его нужно игнорировать. По умолчанию:undefined.
- Возвращает:
<AsyncIterator>объектов со свойствами:
Возвращает асинхронный итератор, отслеживающий изменения для filename, где filename может быть как файлом, так и каталогом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
На большинстве платформ событие 'rename' генерируется всякий раз, когда имя файла появляется или исчезает в каталоге.
Все предостережения для fs.watch() также относятся к fsPromises.watch().
fsPromises.writeFile(file, data[, options])¶
file<string>|<Buffer>|<URL>|<FileHandle>filename orFileHandledata<string>|<Buffer>|<TypedArray>|<DataView>|<AsyncIterable>|<Iterable>|<Stream>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>см. поддержку файловыхflags. По умолчанию:'w'.flush<boolean>если все данные успешно записаны в файл иflushравноtrue, для сброса данных используетсяfilehandle.sync(). По умолчанию:false.signal<AbortSignal>позволяет прервать выполняющийсяwriteFile
- Возвращает:
<Promise>при успехе выполняется сundefined.
Асинхронно записывает данные в файл, заменяя файл, если он уже существует. data может быть строкой, буфером, объектом AsyncIterable или объектом Iterable.
Опция encoding игнорируется, если data является буфером.
Если options — строка, она задаёт кодировку.
Параметр mode влияет только на вновь создаваемый файл. Подробнее см. в fs.open().
Любой указанный FileHandle должен поддерживать запись.
Небезопасно использовать fsPromises.writeFile() несколько раз для одного и того же файла, не дожидаясь завершения промиса.
Как и fsPromises.readFile, fsPromises.writeFile — это удобный метод, который внутри выполняет несколько вызовов write, чтобы записать переданный буфер. Для кода, чувствительного к производительности, лучше использовать fs.createWriteStream() или filehandle.createWriteStream().
Можно использовать AbortSignal, чтобы отменить fsPromises.writeFile(). Отмена выполняется по принципу "best effort", и некоторое количество данных, вероятно, всё равно будет записано.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Прерывание выполняющегося запроса не отменяет отдельные запросы операционной системы, а лишь внутреннюю буферизацию, которую выполняет fs.writeFile.
fsPromises.constants¶
- Тип:
<Object>
Возвращает объект, содержащий часто используемые константы для операций файловой системы. Этот объект совпадает с fs.constants. Подробнее см. в разделе Константы FS.
API обратных вызовов¶
API обратных вызовов выполняют все операции асинхронно, не блокируя цикл событий, а затем вызывают функцию обратного вызова при завершении или ошибке.
API обратных вызовов используют базовый пул потоков Node.js для выполнения операций файловой системы вне потока цикла событий. Эти операции не синхронизированы и не являются потокобезопасными. При выполнении нескольких одновременных изменений одного и того же файла нужно соблюдать осторожность, иначе возможна порча данных.
fs.access(path[, mode], callback)¶
path<string>|<Buffer>|<URL>mode<integer>По умолчанию:fs.constants.F_OKcallback<Function>err<Error>
Проверяет права пользователя на файл или каталог, указанный в path. Аргумент mode — необязательное целое число, задающее выполняемые проверки доступности. mode должен быть либо значением fs.constants.F_OK, либо маской, составленной побитовым ИЛИ из fs.constants.R_OK, fs.constants.W_OK и fs.constants.X_OK (например, fs.constants.W_OK | fs.constants.R_OK). Возможные значения mode см. в разделе Константы доступа к файлам.
Последний аргумент, callback, — это функция обратного вызова, вызываемая с возможным аргументом ошибки. Если какая-либо из проверок доступности завершается неудачей, аргумент ошибки будет объектом Error. В следующих примерах проверяется, существует ли package.json и доступен ли он для чтения или записи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Не используйте fs.access() для проверки доступности файла перед вызовом fs.open(), fs.readFile() или fs.writeFile(). Это создаёт состояние гонки, поскольку между двумя вызовами другой процесс может изменить состояние файла. Вместо этого код пользователя должен напрямую открывать/читать/записывать файл и обрабатывать ошибку, возникающую, если файл недоступен.
write (NOT RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
write (RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
read (NOT RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
read (RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Примеры выше с пометкой "not recommended" сначала проверяют доступность файла, а затем используют его; примеры с пометкой "recommended" лучше, потому что работают с файлом напрямую и при необходимости обрабатывают ошибку.
В общем случае проверяйте доступность файла только тогда, когда сам файл не будет использоваться напрямую, например если его доступность служит сигналом от другого процесса.
В Windows политики управления доступом (ACL) для каталога могут ограничивать доступ к файлу или каталогу. Однако функция fs.access() не проверяет ACL и потому может сообщить, что путь доступен, даже если ACL запрещает пользователю чтение или запись.
fs.appendFile(path, data[, options], callback)¶
path<string>|<Buffer>|<URL>|<number>имя файла или файловый дескрипторdata<string>|<Buffer>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>См. поддержку файловыхflags. По умолчанию:'a'.flush<boolean>Еслиtrue, перед закрытием дескриптора файла выполняется сброс буфера на диск. По умолчанию:false.
callback<Function>err<Error>
Асинхронно добавляет данные в файл, создавая его, если он ещё не существует. data может быть строкой или Buffer.
Опция mode влияет только на вновь создаваемый файл. Подробнее см. fs.open().
1 2 3 4 5 6 | |
Если options — строка, она задаёт кодировку:
1 2 3 | |
path может быть указан как числовой файловый дескриптор, открытый для добавления (через fs.open() или fs.openSync()). Такой файловый дескриптор не закрывается автоматически.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
fs.chmod(path, mode, callback)¶
Асинхронно изменяет права доступа к файлу. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX chmod(2).
1 2 3 4 5 6 | |
File modes¶
Аргумент mode, используемый в методах fs.chmod() и fs.chmodSync(), представляет собой числовую битовую маску, создаваемую с помощью побитового OR следующих констант:
| Константа | Восьмеричное значение | Описание |
|---|---|---|
fs.constants.S_IRUSR | 0o400 | чтение владельцем |
fs.constants.S_IWUSR | 0o200 | запись владельцем |
fs.constants.S_IXUSR | 0o100 | выполнение/поиск владельцем |
fs.constants.S_IRGRP | 0o40 | чтение группой |
fs.constants.S_IWGRP | 0o20 | запись группой |
fs.constants.S_IXGRP | 0o10 | выполнение/поиск группой |
fs.constants.S_IROTH | 0o4 | чтение остальными |
fs.constants.S_IWOTH | 0o2 | запись остальными |
fs.constants.S_IXOTH | 0o1 | выполнение/поиск остальными |
Более простой способ задать mode — использовать последовательность из трёх восьмеричных цифр (например, 765). Самая левая цифра (7 в примере) задаёт права для владельца файла. Средняя цифра (6 в примере) задаёт права для группы. Самая правая цифра (5 в примере) задаёт права для остальных.
| Число | Описание |
|---|---|
7 | чтение, запись и выполнение |
6 | чтение и запись |
5 | чтение и выполнение |
4 | только чтение |
3 | запись и выполнение |
2 | только запись |
1 | только выполнение |
0 | нет прав |
Например, восьмеричное значение 0o765 означает:
- владелец может читать, записывать и выполнять файл;
- группа может читать и записывать файл;
- остальные могут читать и выполнять файл.
Если использовать необработанные числа там, где ожидаются режимы файлов, любое значение больше 0o777 может приводить к платформенно-зависимому поведению, для которого не гарантируется единообразная работа. Поэтому константы вроде S_ISVTX, S_ISGID или S_ISUID не экспортируются через fs.constants.
Предостережение: в Windows можно изменить только право на запись, а различие между правами группы, владельца и остальных не реализовано.
fs.chown(path, uid, gid, callback)¶
Асинхронно изменяет владельца и группу файла. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX chown(2).
fs.close(fd[, callback])¶
fd<integer>callback<Function>err<Error>
Закрывает файловый дескриптор. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Вызов fs.close() для любого файлового дескриптора (fd), который в данный момент используется в какой-либо другой операции fs, может привести к неопределённому поведению.
Подробнее см. POSIX close(2).
fs.copyFile(src, dest[, mode], callback)¶
src<string>|<Buffer>|<URL>имя исходного файла для копированияdest<string>|<Buffer>|<URL>имя целевого файла операции копированияmode<integer>модификаторы операции копирования. По умолчанию:0.callback<Function>err<Error>
Асинхронно копирует src в dest. По умолчанию dest будет перезаписан, если он уже существует. В callback не передаются никакие аргументы, кроме возможного исключения. 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, операция завершится ошибкой.
1 2 3 4 5 6 7 8 9 10 11 12 | |
fs.cp(src, dest[, options], callback)¶
src<string>|<URL>Исходный путь для копирования.dest<string>|<URL>Путь назначения для копирования.options<Object>dereference<boolean>Разыменовывать символические ссылки. По умолчанию:false.errorOnExist<boolean>Еслиforceравноfalseи место назначения существует, выбрасывать ошибку. По умолчанию:false.filter<Function>Функция для фильтрации копируемых файлов и каталогов. Вернитеtrue, чтобы скопировать элемент, иfalse, чтобы его проигнорировать. Если игнорируется каталог, всё его содержимое также будет пропущено. Может также возвращатьPromise, который разрешается вtrueилиfalseПо умолчанию:undefined.force<boolean>Перезаписывать существующий файл или каталог. Операция копирования будет игнорировать ошибки, если установитьfalse, а место назначения уже существует. Используйте опциюerrorOnExist, чтобы изменить это поведение. По умолчанию:true.mode<integer>Модификаторы операции копирования. По умолчанию:0. См. флагmodeуfs.copyFile().preserveTimestamps<boolean>Еслиtrue, временные метки изsrcбудут сохранены. По умолчанию:false.recursive<boolean>Копировать каталоги рекурсивно. По умолчанию:falseverbatimSymlinks<boolean>Еслиtrue, разрешение путей для символических ссылок будет пропущено. По умолчанию:false
callback<Function>err<Error>
Асинхронно копирует всю структуру каталогов из src в dest, включая подкаталоги и файлы.
При копировании одного каталога в другой glob-шаблоны не поддерживаются, а поведение аналогично cp dir1/ dir2/.
fs.createReadStream(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>flags<string>См. поддержку файловыхflags. По умолчанию:'r'.encoding<string>По умолчанию:nullfd<integer>|<FileHandle>По умолчанию:nullmode<integer>По умолчанию:0o666autoClose<boolean>По умолчанию:trueemitClose<boolean>По умолчанию:truestart<integer>end<integer>По умолчанию:InfinityhighWaterMark<integer>По умолчанию:64 * 1024fs<Object>| null По умолчанию:nullsignal<AbortSignal>| null По умолчанию:null
- Возвращает:
<fs.ReadStream>
options может включать значения start и end, чтобы читать диапазон байтов файла, а не весь файл целиком. И start, и end включаются в диапазон, отсчёт начинается с 0, допустимые значения находятся в диапазоне [0, Number.MAX_SAFE_INTEGER]. Если указан fd, а start опущен или равен undefined, fs.createReadStream() читает последовательно от текущей позиции в файле. encoding может быть любым из значений, принимаемых Buffer.
Если указан fd, ReadStream игнорирует аргумент path и использует переданный файловый дескриптор. Это означает, что событие 'open' сгенерировано не будет. fd должен быть блокирующим; неблокирующие fd следует передавать в net.Socket.
Если fd указывает на символьное устройство, поддерживающее только блокирующее чтение (например, клавиатуру или звуковую карту), операции чтения не завершаются, пока данные не станут доступны. Это может помешать завершению процесса и естественному закрытию потока.
По умолчанию поток генерирует событие 'close' после уничтожения. Чтобы изменить это поведение, установите опцию emitClose в false.
Через опцию fs можно переопределить соответствующие реализации fs для open, read и close. При передаче опции fs переопределение read обязательно. Если fd не указан, обязательно также переопределение open. Если autoClose равно true, обязательно также переопределение close.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Если autoClose равно false, файловый дескриптор не будет закрыт даже при ошибке. Приложение само отвечает за его закрытие и за отсутствие утечек файловых дескрипторов. Если autoClose установлено в true (поведение по умолчанию), при 'error' или 'end' файловый дескриптор будет закрыт автоматически.
mode задаёт режим файла (права доступа и sticky-биты), но только если файл был создан.
Пример чтения последних 10 байтов файла длиной 100 байтов:
1 2 3 | |
Если options — строка, она задаёт кодировку.
fs.createWriteStream(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>flags<string>См. поддержку файловыхflags. По умолчанию:'w'.encoding<string>По умолчанию:'utf8'fd<integer>|<FileHandle>По умолчанию:nullmode<integer>По умолчанию:0o666autoClose<boolean>По умолчанию:trueemitClose<boolean>По умолчанию:truestart<integer>fs<Object>| null По умолчанию:nullsignal<AbortSignal>| null По умолчанию:nullhighWaterMark<number>По умолчанию:16384flush<boolean>еслиtrue, базовый файловый дескриптор будет сброшен перед закрытием. По умолчанию:false.
- Возвращает:
<fs.WriteStream>
options также может включать опцию start, позволяющую писать данные в некоторую позицию после начала файла; допустимые значения лежат в диапазоне [0, Number.MAX_SAFE_INTEGER]. Чтобы изменять файл, а не заменять его, может потребоваться установить flags в r+, а не использовать значение по умолчанию w. encoding может быть любым из значений, принимаемых Buffer.
Если autoClose установлено в true (поведение по умолчанию), при 'error' или 'finish' файловый дескриптор будет закрыт автоматически. Если autoClose равно false, файловый дескриптор не будет закрыт даже при ошибке. Приложение само отвечает за его закрытие и за отсутствие утечек файловых дескрипторов.
По умолчанию поток генерирует событие 'close' после уничтожения. Чтобы изменить это поведение, установите опцию emitClose в false.
Через опцию fs можно переопределить соответствующие реализации fs для open, write, writev и close. Переопределение write() без writev() может снизить производительность, потому что некоторые оптимизации (_writev()) будут отключены. При передаче опции fs требуется переопределить как минимум одну из функций write и writev. Если опция fd не передана, обязательно также переопределение open. Если autoClose равно true, обязательно также переопределение close.
Как и fs.ReadStream, если указан fd, fs.WriteStream игнорирует аргумент path и использует переданный файловый дескриптор. Это означает, что событие 'open' сгенерировано не будет. fd должен быть блокирующим; неблокирующие fd следует передавать в net.Socket.
Если options — строка, она задаёт кодировку.
fs.exists(path, callback)¶
Стабильность: 0 - устарело или набрало много негативных отзывов
Используйте fs.stat() или fs.access().
path<string>|<Buffer>|<URL>callback<Function>exists<boolean>
Проверяет через файловую систему, существует ли элемент по указанному пути path. Затем вызывает callback со значением true или false:
1 2 3 4 5 | |
Параметры этого callback не согласованы с другими callback Node.js. Обычно первый параметр callback в Node.js — это err, за которым при необходимости следуют другие параметры. Callback fs.exists() имеет только один логический параметр. Это одна из причин, почему вместо fs.exists() рекомендуется использовать fs.access().
Если path является символической ссылкой, она будет разыменована. Поэтому, если path существует, но указывает на несуществующий элемент, callback получит значение false.
Использовать fs.exists() для проверки существования файла перед вызовом fs.open(), fs.readFile() или fs.writeFile() не рекомендуется. Это создаёт состояние гонки, поскольку между двумя вызовами другой процесс может изменить состояние файла. Вместо этого код пользователя должен напрямую открывать/читать/записывать файл и обрабатывать ошибку, возникающую, если файл не существует.
write (NOT RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
write (RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
read (NOT RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
read (RECOMMENDED)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Примеры выше с пометкой "not recommended" сначала проверяют существование файла, а затем используют его; примеры с пометкой "recommended" лучше, потому что работают с файлом напрямую и при необходимости обрабатывают ошибку.
В общем случае проверяйте существование файла только тогда, когда сам файл не будет использоваться напрямую, например если его наличие служит сигналом от другого процесса.
fs.fchmod(fd, mode, callback)¶
fd<integer>mode<string>|<integer>callback<Function>err<Error>
Устанавливает права доступа к файлу. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX fchmod(2).
fs.fchown(fd, uid, gid, callback)¶
fd<integer>uid<integer>gid<integer>callback<Function>err<Error>
Устанавливает владельца файла. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX fchown(2).
fs.fdatasync(fd, callback)¶
fd<integer>callback<Function>err<Error>
Принудительно переводит все текущие поставленные в очередь операции ввода-вывода, связанные с файлом, в состояние синхронизированного завершения ввода-вывода на уровне операционной системы. Подробнее см. документацию POSIX fdatasync(2). В callback завершения не передаются никакие аргументы, кроме возможного исключения.
fs.fstat(fd[, options], callback)¶
fd<integer>options<Object>callback<Function>err<Error>stats<fs.Stats>
Вызывает callback с объектом fs.Stats для файлового дескриптора.
Подробнее см. POSIX fstat(2).
fs.fsync(fd, callback)¶
fd<integer>callback<Function>err<Error>
Запрашивает сброс всех данных открытого файлового дескриптора на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Подробнее см. документацию POSIX fsync(2). В callback завершения не передаются никакие аргументы, кроме возможного исключения.
fs.ftruncate(fd[, len], callback)¶
fd<integer>len<integer>По умолчанию:0callback<Function>err<Error>
Усекает файловый дескриптор. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX ftruncate(2).
Если файл, на который указывает файловый дескриптор, был длиннее len байт, в файле будут сохранены только первые len байт.
Например, следующая программа сохраняет только первые четыре байта файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Если до этого файл был короче len байт, он будет расширен, а добавленная часть заполнена нулевыми байтами ('\0'):
Если len отрицательно, будет использовано значение 0.
fs.futimes(fd, atime, mtime, callback)¶
fd<integer>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>callback<Function>err<Error>
Изменяет временные метки файловой системы для объекта, на который ссылается переданный файловый дескриптор. См. fs.utimes().
fs.glob(pattern[, options], callback)¶
-
pattern<string>|<string[]> -
options<Object>cwd<string>|<URL>Текущий рабочий каталог. По умолчанию:process.cwd()exclude<Function>|<string[]>Функция для исключения файлов и каталогов из выборки либо список glob-шаблонов для исключения. Если передана функция, вернитеtrue, чтобы исключить элемент, иfalse, чтобы его включить. По умолчанию:undefined. Если передан массив строк, каждая строка должна быть glob-шаблоном, задающим исключаемые пути. Примечание: шаблоны с отрицанием (например,'!foo.js') не поддерживаются.withFileTypes<boolean>Еслиtrue, glob возвращает пути в виде объектовDirent; еслиfalse— в виде строк. По умолчанию:false.
-
callback<Function>err<Error>
-
Получает пути к файлам, соответствующим указанному шаблону.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
fs.lchmod(path, mode, callback)¶
Stability: 0 - Deprecated
path<string>|<Buffer>|<URL>mode<integer>callback<Function>err<Error>|<AggregateError>
Изменяет права доступа символической ссылки. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Этот метод реализован только в macOS.
Подробнее см. POSIX lchmod(2).
fs.lchown(path, uid, gid, callback)¶
Устанавливает владельца символической ссылки. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX lchown(2).
fs.lutimes(path, atime, mtime, callback)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>callback<Function>err<Error>
Изменяет время доступа и модификации файла так же, как fs.utimes(), с той разницей, что если путь указывает на символическую ссылку, то разыменование не выполняется: вместо этого изменяются временные метки самой символической ссылки.
В callback завершения не передаются никакие аргументы, кроме возможного исключения.
fs.link(existingPath, newPath, callback)¶
existingPath<string>|<Buffer>|<URL>newPath<string>|<Buffer>|<URL>callback<Function>err<Error>
Создаёт новую жёсткую ссылку с existingPath на newPath. Подробнее см. POSIX link(2). В callback завершения не передаются никакие аргументы, кроме возможного исключения.
fs.lstat(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>callback<Function>err<Error>stats<fs.Stats>
Получает fs.Stats для символической ссылки, на которую указывает путь. Callback получает два аргумента (err, stats), где stats — объект fs.Stats. lstat() идентичен stat(), за исключением того, что если path является символической ссылкой, статистика берётся для самой ссылки, а не для файла, на который она указывает.
Подробнее см. POSIX lstat(2).
fs.mkdir(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>|<integer>recursive<boolean>По умолчанию:falsemode<string>|<integer>не поддерживается в Windows. Подробнее см. Режимы файла. По умолчанию:0o777.
callback<Function>
Асинхронно создаёт каталог.
Callback получает возможное исключение и, если recursive равно true, путь к первому созданному каталогу, (err[, path]). path всё ещё может быть undefined, когда recursive равно true, если каталог не был создан (например, если он уже существовал).
Необязательный аргумент options может быть целым числом, задающим mode (права доступа и sticky-биты), либо объектом со свойствами mode и recursive, указывающим, нужно ли создавать родительские каталоги. Вызов fs.mkdir() с path, который уже существует как каталог, приводит к ошибке только если recursive равно false. Если recursive равно false и каталог существует, возникает ошибка EEXIST.
1 2 3 4 5 6 | |
В Windows использование fs.mkdir() для корневого каталога даже с рекурсией приведёт к ошибке:
1 2 3 4 5 | |
Подробнее см. POSIX mkdir(2).
fs.mkdtemp(prefix[, options], callback)¶
prefix<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
callback<Function>
Создаёт уникальный временный каталог.
Генерирует шесть случайных символов, добавляемых в конец обязательного prefix, чтобы создать уникальный временный каталог. Из-за различий между платформами избегайте завершающих символов X в prefix. Некоторые платформы, особенно BSD, могут возвращать более шести случайных символов и заменять завершающие X в prefix случайными символами.
Путь к созданному каталогу передаётся строкой во второй параметр callback.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим используемую кодировку символов.
1 2 3 4 5 6 7 8 9 | |
Метод fs.mkdtemp() добавляет шесть случайно выбранных символов непосредственно к строке prefix. Например, если дан каталог /tmp и требуется создать временный каталог внутри /tmp, prefix должен заканчиваться завершающим платформенно-зависимым разделителем пути (require('node:path').sep).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
fs.open(path[, flags[, mode]], callback)¶
path<string>|<Buffer>|<URL>flags<string>|<number>См. поддержку файловыхflags. По умолчанию:'r'.mode<string>|<integer>По умолчанию:0o666(доступен для чтения и записи)callback<Function>
Асинхронное открытие файла. Подробнее см. POSIX open(2).
mode задаёт режим файла (права доступа и sticky-биты), но только если файл был создан. В Windows можно управлять только правом на запись; см. fs.chmod().
Callback получает два аргумента (err, fd).
Некоторые символы (< > : " / \ | ? *) в Windows зарезервированы, см. Имена файлов, путей и пространств имён. В NTFS, если имя файла содержит двоеточие, Node.js откроет поток файловой системы, как описано на этой странице Microsoft Learn.
Такое же поведение наблюдается и у функций, основанных на fs.open(): fs.writeFile(), fs.readFile() и т. д.
fs.openAsBlob(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>type<string>необязательный MIME-тип для blob
- Возвращает:
<Promise>при успехе выполняется объектом Blob
Возвращает Blob, данные которого опираются на указанный файл.
Файл нельзя изменять после создания Blob. Любые изменения приведут к ошибке чтения данных Blob с DOMException. При создании Blob и перед каждым чтением выполняются синхронные операции stat над файлом, чтобы определить, были ли данные файла изменены на диске.
1 2 3 4 5 | |
1 2 3 4 5 6 7 | |
fs.opendir(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>callback<Function>
Асинхронно открывает каталог. Подробнее см. POSIX opendir(3).
Создаёт fs.Dir со всеми методами чтения и очистки каталога.
Опция encoding задаёт кодировку для path при открытии и дальнейших операциях чтения.
fs.read(fd, buffer, offset, length, position, callback)¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>буфер, в который будут записаны данныеoffset<integer>позиция вbuffer, в которую будут записаны данныеlength<integer>количество байтов для чтенияposition<integer>|<bigint>| null указывает, с какого места в файле начинать чтение. Еслиpositionравноnullили-1, данные читаются с текущей позиции в файле, и позиция файла будет обновлена. Еслиposition— неотрицательное целое число, позиция файла не изменится.callback<Function>
Читает данные из файла, указанного в fd.
Callback получает три аргумента: (err, bytesRead, buffer).
Если файл не изменяется параллельно, конец файла достигается, когда количество прочитанных байтов равно нулю.
Если метод вызывается в версии, обёрнутой через util.promisify(), он возвращает промис, исполняемый объектом Object со свойствами bytesRead и buffer.
Метод fs.read() читает данные из файла, указанного файловым дескриптором (fd). Аргумент length указывает максимальное количество байтов, которое Node.js попытается прочитать из ядра. Однако фактическое количество прочитанных байтов (bytesRead) по разным причинам может быть меньше указанного length.
Например:
- если файл короче указанного
length, вbytesReadбудет записано фактическое число прочитанных байтов; - если файл достигает EOF (конца файла) до заполнения буфера, Node.js прочитает все доступные байты до EOF, а параметр
bytesReadв callback укажет фактическое количество прочитанных байтов, которое может быть меньше заданногоlength; - если файл находится в медленной сетевой файловой системе или при чтении возникает любая другая проблема,
bytesReadможет быть меньше указанногоlength.
Поэтому при использовании fs.read() важно проверять значение bytesRead, чтобы определить, сколько байтов действительно было прочитано из файла. В зависимости от логики приложения может потребоваться обработка случаев, когда bytesRead меньше указанного length, например через оборачивание вызова чтения в цикл, если требуется минимум определённого количества байтов.
Это поведение похоже на функцию POSIX preadv2.
fs.read(fd[, options], callback)¶
fd<integer>options<Object>buffer<Buffer>|<TypedArray>|<DataView>По умолчанию:Buffer.alloc(16384)offset<integer>По умолчанию:0length<integer>По умолчанию:buffer.byteLength - offsetposition<integer>|<bigint>| null По умолчанию:null
callback<Function>
Аналогично fs.read(), эта перегрузка принимает необязательный объект options. Если объект options не указан, используются значения по умолчанию, перечисленные выше.
fs.read(fd, buffer[, options], callback)¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>Буфер, в который будут записаны прочитанные данные.options<Object>callback<Function>
Аналогично fs.read(), эта перегрузка принимает необязательный объект options. Если объект options не указан, используются значения по умолчанию, перечисленные выше.
fs.readdir(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<string>|<Object>callback<Function>err<Error>files<string[]>|<Buffer[]>|<fs.Dirent[]>
Читает содержимое каталога. Callback получает два аргумента (err, files), где files — это массив имён файлов каталога, исключая '.' и '..'.
Подробнее см. POSIX readdir(3).
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим кодировку имён файлов, передаваемых в callback. Если encoding установлено в 'buffer', возвращаемые имена файлов будут объектами Buffer.
Если options.withFileTypes установлено в true, массив files будет содержать объекты fs.Dirent.
fs.readFile(path[, options], callback)¶
path<string>|<Buffer>|<URL>|<integer>имя файла или файловый дескрипторoptions<Object>|<string>encoding<string>| null По умолчанию:nullflag<string>см. поддержку файловыхflags. По умолчанию:'r'.signal<AbortSignal>позволяет прервать выполняющийсяreadFile
callback<Function>err<Error>|<AggregateError>data<string>|<Buffer>
Асинхронно читает всё содержимое файла.
1 2 3 4 5 6 | |
В callback передаются два аргумента (err, data), где data — содержимое файла.
Если кодировка не указана, возвращается исходный буфер.
Если options — строка, она задаёт кодировку:
1 2 3 | |
Если путь указывает на каталог, поведение fs.readFile() и fs.readFileSync() зависит от платформы. В macOS, Linux и Windows будет возвращена ошибка. В FreeBSD будет возвращено представление содержимого каталога.
1 2 3 4 5 6 7 8 9 10 11 | |
Текущий запрос можно прервать с помощью AbortSignal. Если запрос прерван, callback вызывается с AbortError:
1 2 3 4 5 6 7 8 9 | |
Функция fs.readFile() буферизует весь файл целиком. Чтобы уменьшить расходы памяти, по возможности предпочтительнее использовать потоковое чтение через fs.createReadStream().
Прерывание выполняющегося запроса не отменяет отдельные запросы операционной системы, а лишь внутреннюю буферизацию, которую выполняет fs.readFile.
Файловые дескрипторы¶
- Any specified file descriptor has to support reading.
- If a file descriptor is specified as the
path, it will not be closed automatically. - The reading will begin at the current position. For example, if the file already had
'Hello World'and six bytes are read with the file descriptor, the call tofs.readFile()with the same file descriptor, would give'World', rather than'Hello World'.
Соображения производительности¶
Метод fs.readFile() асинхронно читает содержимое файла в память по одному фрагменту за раз, позволяя циклу событий выполняться между чтениями отдельных фрагментов. Благодаря этому операция чтения меньше влияет на другую активность, которая также может использовать базовый пул потоков libuv, но полное чтение файла в память занимает больше времени.
Дополнительные накладные расходы на чтение могут сильно различаться в разных системах и зависят от типа читаемого файла. Если файл не является обычным файлом (например, это канал) и Node.js не может определить его фактический размер, каждая операция чтения будет загружать по 64 КиБ данных. Для обычных файлов каждая операция чтения обрабатывает по 512 КиБ данных.
Для приложений, которым нужно максимально быстро читать содержимое файлов, лучше использовать fs.read() напрямую и самостоятельно управлять чтением всего содержимого файла на уровне кода приложения.
Issue Node.js #25741 содержит дополнительную информацию и подробный анализ производительности fs.readFile() для файлов разных размеров в разных версиях Node.js.
fs.readlink(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
callback<Function>
Читает содержимое символической ссылки, на которую указывает path. Callback получает два аргумента: (err, linkString).
Подробнее см. POSIX readlink(2).
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим кодировку символов для пути ссылки, передаваемого в callback. Если encoding установлено в 'buffer', возвращаемый путь ссылки будет передан как объект Buffer.
fs.readv(fd, buffers[, position], callback)¶
fd<integer>buffers<ArrayBufferView[]>position<integer>| null По умолчанию:nullcallback<Function>err<Error>bytesRead<integer>buffers<ArrayBufferView[]>
Читает данные из файла, указанного fd, и записывает их в массив ArrayBufferView с помощью readv().
position — это смещение от начала файла, с которого следует читать данные. Если typeof position !== 'number', данные будут читаться с текущей позиции.
Callback получает три аргумента: err, bytesRead и buffers. bytesRead показывает, сколько байтов было прочитано из файла.
Если этот метод вызывается в версии, полученной через util.promisify(), он возвращает промис для объекта со свойствами bytesRead и buffers.
fs.realpath(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
callback<Function>
Асинхронно вычисляет канонический путь, разрешая ., .. и символические ссылки.
Канонический путь не обязательно уникален. Жёсткие ссылки и bind mount могут предоставлять одну и ту же сущность файловой системы через разные пути.
Эта функция ведёт себя как realpath(3), за некоторыми исключениями:
-
На файловых системах без учёта регистра преобразование регистра не выполняется.
-
Максимальное число символических ссылок не зависит от платформы и обычно значительно больше, чем поддерживает нативная реализация
realpath(3).
Callback получает два аргумента: (err, resolvedPath). Для разрешения относительных путей может использоваться process.cwd.
Поддерживаются только пути, которые можно преобразовать в строки UTF-8.
Необязательный аргумент options может быть строкой с именем кодировки или объектом со свойством encoding, задающим кодировку символов для пути, передаваемого в callback. Если encoding равен 'buffer', путь в callback передаётся как объект Buffer.
Если path разрешается в сокет или канал, функция вернёт системно-зависимое имя этого объекта.
Путь, который не существует, приводит к ошибке ENOENT. error.path содержит абсолютный путь к файлу.
fs.realpath.native(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
callback<Function>
Асинхронная версия realpath(3).
Callback получает два аргумента: (err, resolvedPath).
Поддерживаются только пути, которые можно преобразовать в строки UTF-8.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, определяющим кодировку символов для пути, передаваемого в callback. Если encoding равно 'buffer', возвращаемый путь будет передан как объект Buffer.
В Linux, когда Node.js слинкован с musl libc, для работы этой функции файловая система procfs должна быть смонтирована в /proc. У glibc этого ограничения нет.
fs.rename(oldPath, newPath, callback)¶
oldPath<string>|<Buffer>|<URL>newPath<string>|<Buffer>|<URL>callback<Function>err<Error>
Асинхронно переименовывает файл из oldPath в путь, указанный как newPath. Если newPath уже существует, он будет перезаписан. Если по newPath находится каталог, вместо этого будет выброшена ошибка. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
См. также: rename(2).
1 2 3 4 5 6 | |
fs.rmdir(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>в настоящий момент никаких опций не предоставляется. Раньше существовали опцииrecursive,maxBusyTriesиemfileWait, но они были устаревшими и удалены. Аргументoptionsпо-прежнему принимается для обратной совместимости, но не используется.callback<Function>err<Error>
Асинхронная версия rmdir(2). В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Использование fs.rmdir() для файла (а не каталога) приводит к ошибке ENOENT в Windows и ENOTDIR в POSIX.
Чтобы получить поведение, аналогичное Unix-команде rm -rf, используйте fs.rm() с опциями { recursive: true, force: true }.
fs.rm(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>force<boolean>еслиtrue, исключения будут игнорироваться, еслиpathне существует. По умолчанию:false.maxRetries<integer>если возникает ошибкаEBUSY,EMFILE,ENFILE,ENOTEMPTYилиEPERM, Node.js повторяет операцию, линейно увеличивая ожидание наretryDelayмиллисекунд при каждой попытке. Эта опция задаёт число повторов. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:0.recursive<boolean>еслиtrue, выполняется рекурсивное удаление. В рекурсивном режиме операции повторяются при сбоях. По умолчанию:false.retryDelay<integer>количество миллисекунд ожидания между повторными попытками. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:100.
callback<Function>err<Error>
Асинхронно удаляет файлы и каталоги (по образцу стандартной POSIX-утилиты rm). В callback завершения не передаются никакие аргументы, кроме возможного исключения.
fs.stat(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>callback<Function>err<Error>stats<fs.Stats>
Асинхронная версия stat(2). Callback получает два аргумента (err, stats), где stats — объект fs.Stats.
В случае ошибки err.code будет одним из распространённых системных ошибок.
fs.stat() разыменовывает символические ссылки. Чтобы получить сведения о самих ссылках, используйте fs.lstat().
Использовать fs.stat() для проверки существования файла перед вызовом fs.open(), fs.readFile() или fs.writeFile() не рекомендуется. Вместо этого пользовательский код должен напрямую открывать/читать/записывать файл и обрабатывать возникающую ошибку, если файл недоступен.
Чтобы проверить существование файла без последующих операций с ним, рекомендуется fs.access().
Например, при следующей структуре каталогов:
1 2 3 | |
Следующая программа проверит статистику для указанных путей:
1 2 3 4 5 6 7 8 9 10 | |
Результирующий вывод будет примерно таким:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | |
fs.statfs(path[, options], callback)¶
path<string>|<Buffer>|<URL>options<Object>callback<Function>err<Error>stats<fs.StatFs>
Асинхронная версия statfs(2). Возвращает информацию о смонтированной файловой системе, содержащей path. Callback получает два аргумента (err, stats), где stats — объект fs.StatFs.
В случае ошибки err.code будет одним из распространённых системных ошибок.
fs.symlink(target, path[, type], callback)¶
target<string>|<Buffer>|<URL>path<string>|<Buffer>|<URL>type<string>| null По умолчанию:nullcallback<Function>err<Error>
Создаёт ссылку с именем path, указывающую на target. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
Подробнее см. POSIX symlink(2).
Аргумент type доступен только в Windows и игнорируется на других платформах. Он может принимать значения 'dir', 'file' или 'junction'. Если type равно null, Node.js автоматически определит тип target и использует 'file' или 'dir'. Если target не существует, будет использовано 'file'. Точки соединения Windows требуют, чтобы путь назначения был абсолютным. При использовании 'junction' аргумент target автоматически нормализуется к абсолютному пути. Точки соединения на томах NTFS могут указывать только на каталоги.
Относительные цели рассчитываются относительно родительского каталога ссылки.
1 2 3 | |
Пример выше создаёт символическую ссылку mewtwo, указывающую на mew в том же каталоге:
1 2 3 4 | |
fs.truncate(path[, len], callback)¶
path<string>|<Buffer>|<URL>len<integer>По умолчанию:0callback<Function>err<Error>|<AggregateError>
Усекает файл. В callback завершения не передаются никакие аргументы, кроме возможного исключения. В качестве первого аргумента также можно передать файловый дескриптор. В этом случае будет вызван fs.ftruncate().
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Передача файлового дескриптора устарела и в будущем может приводить к выбрасыванию ошибки.
Подробнее см. POSIX truncate(2).
fs.unlink(path, callback)¶
path<string>|<Buffer>|<URL>callback<Function>err<Error>
Асинхронно удаляет файл или символическую ссылку. В callback завершения не передаются никакие аргументы, кроме возможного исключения.
1 2 3 4 5 6 | |
fs.unlink() не удаляет каталог — ни пустой, ни непустой. Чтобы удалить каталог, используйте fs.rmdir().
Подробнее см. POSIX unlink(2).
fs.unwatchFile(filename[, listener])¶
filename<string>|<Buffer>|<URL>listener<Function>необязательный listener, ранее подключённый черезfs.watchFile()
Прекращает отслеживание изменений для filename. Если указан listener, удаляется только этот конкретный listener. Иначе удаляются все listeners, что фактически останавливает наблюдение за filename.
Вызов fs.unwatchFile() с именем файла, который не отслеживается, ничего не делает и не считается ошибкой.
Использование fs.watch() эффективнее, чем fs.watchFile() и fs.unwatchFile(). По возможности вместо fs.watchFile() и fs.unwatchFile() следует использовать fs.watch().
fs.utimes(path, atime, mtime, callback)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>callback<Function>err<Error>
Изменяет временные метки файловой системы объекта, на который указывает path.
Аргументы atime и mtime подчиняются следующим правилам:
- значения могут быть числами, представляющими Unix-время в секундах, объектами
Dateили числовой строкой вроде'123456789.0'; - если значение нельзя преобразовать в число либо оно равно
NaN,Infinityили-Infinity, будет выброшена ошибкаError.
fs.watch(filename[, options][, listener])¶
filename<string>|<Buffer>|<URL>options<string>|<Object>persistent<boolean>указывает, должен ли процесс продолжать работу, пока файлы отслеживаются. По умолчанию:true.recursive<boolean>указывает, нужно ли отслеживать все подкаталоги или только текущий каталог. Применяется, когда указан каталог, и только на поддерживаемых платформах (см. Предостережения). По умолчанию:false.encoding<string>задаёт кодировку символов для имени файла, передаваемого в listener. По умолчанию:'utf8'.signal<AbortSignal>позволяет закрыть наблюдатель с помощьюAbortSignal.throwIfNoEntry<boolean>указывает, следует ли выбрасывать исключение, если путь не существует. По умолчанию:true.ignore<string>|<RegExp>|<Function>|<Array>шаблон(ы) для игнорирования. Строки трактуются как glob-шаблоны (с использованиемminimatch), шаблоныRegExpпроверяются по имени файла, а функции получают имя файла и возвращаютtrue, если его нужно игнорировать. По умолчанию:undefined.
listener<Function>| undefined По умолчанию:undefined- Возвращает:
<fs.FSWatcher>
Отслеживает изменения для filename, где filename может быть либо файлом, либо каталогом.
Второй аргумент необязателен. Если options передан как строка, он задаёт encoding. В противном случае options следует передавать как объект.
Callback listener получает два аргумента (eventType, filename). eventType принимает значение 'rename' или 'change', а filename — это имя файла, вызвавшего событие.
На большинстве платформ событие 'rename' генерируется всякий раз, когда имя файла появляется или исчезает в каталоге.
Callback-слушатель привязан к событию 'change', которое генерирует fs.FSWatcher, но это не то же самое, что значение 'change' у eventType.
Если передан signal, вызов abort() у соответствующего AbortController закроет возвращённый fs.FSWatcher.
Предостережения¶
API fs.watch не является полностью одинаковым на всех платформах и в некоторых ситуациях недоступно.
В Windows никакие события не будут сгенерированы, если отслеживаемый каталог был перемещён или переименован. При удалении отслеживаемого каталога сообщается об ошибке EPERM.
API fs.watch не обеспечивает никакой защиты от злонамеренных действий в файловой системе. Например, в Windows оно реализовано как мониторинг изменений в каталоге, а не в конкретных файлах. Из-за этого файл можно подменить, и fs будет сообщать об изменениях уже в новом файле с тем же именем.
Доступность¶
Эта возможность зависит от того, предоставляет ли базовая операционная система механизм уведомления об изменениях файловой системы.
- В Linux используется
inotify(7). - В BSD используется
kqueue(2). - В macOS для файлов используется
kqueue(2), а для каталогов —FSEvents. - В SunOS (включая Solaris и SmartOS) используются
event ports. - В Windows эта возможность зависит от
ReadDirectoryChangesW. - В AIX эта возможность зависит от
AHAFS, который должен быть включён. - В IBM i эта возможность не поддерживается.
Если по какой-либо причине базовая функциональность недоступна, fs.watch() не сможет работать и может выбросить исключение. Например, наблюдение за файлами или каталогами может быть ненадёжным, а в некоторых случаях невозможным, в сетевых файловых системах (NFS, SMB и т. п.) или в файловых системах хоста при использовании ПО виртуализации вроде Vagrant или Docker.
По-прежнему можно использовать fs.watchFile(), который применяет опрос через stat, но этот метод медленнее и менее надёжен.
Inode¶
В Linux и macOS fs.watch() разрешает путь до inode и отслеживает именно inode. Если отслеживаемый путь удалить и создать заново, ему будет назначен новый inode. Наблюдатель сгенерирует событие удаления, но продолжит следить за исходным inode. События для нового inode сгенерированы не будут. Это ожидаемое поведение.
В AIX файлы сохраняют один и тот же inode на всём протяжении своего существования. Сохранение и закрытие отслеживаемого файла в AIX приведёт к двум уведомлениям: одному о добавлении нового содержимого и одному об усечении.
Аргумент filename¶
Передача аргумента filename в callback поддерживается только в Linux, macOS, Windows и AIX. Даже на поддерживаемых платформах наличие filename не гарантируется. Поэтому не следует предполагать, что аргумент filename всегда будет передан в callback; предусмотрите запасную логику на случай, если он равен null.
1 2 3 4 5 6 7 8 9 | |
fs.watchFile(filename[, options], listener)¶
filename<string>|<Buffer>|<URL>options<Object>listener<Function>current<fs.Stats>previous<fs.Stats>
- Возвращает:
<fs.StatWatcher>
Отслеживает изменения для filename. Callback listener будет вызываться каждый раз, когда к файлу происходит доступ.
Аргумент options можно опустить. Если он указан, это должен быть объект. Объект options может содержать булево свойство persistent, указывающее, должен ли процесс продолжать работу, пока файлы отслеживаются. Объект options также может задавать свойство interval, определяющее частоту опроса цели в миллисекундах.
listener получает два аргумента: текущий объект stat и предыдущий объект stat:
1 2 3 4 5 6 | |
Эти объекты stat являются экземплярами fs.Stat. Если опция bigint равна true, числовые значения в этих объектах представлены как BigInt.
Чтобы получать уведомление именно об изменении файла, а не только о доступе к нему, необходимо сравнивать curr.mtimeMs и prev.mtimeMs.
Когда операция fs.watchFile приводит к ошибке ENOENT, listener будет вызван один раз, при этом все поля будут обнулены (а для дат будет использована Unix Epoch). Если файл позже будет создан, listener будет вызван снова, уже с актуальными объектами stat. Это изменение поведения, действующее с v0.10.
Использование fs.watch() эффективнее, чем fs.watchFile и fs.unwatchFile. По возможности вместо fs.watchFile и fs.unwatchFile следует использовать fs.watch.
Когда файл, отслеживаемый через fs.watchFile(), исчезает и затем появляется снова, содержимое previous во втором событии callback (повторное появление файла) будет таким же, как содержимое previous в первом событии callback (его исчезновение).
Это происходит, когда:
- файл удаляется, а затем восстанавливается;
- файл переименовывается, а затем переименовывается ещё раз обратно в исходное имя.
fs.write(fd, buffer, offset[, length[, position]], callback)¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>offset<integer>По умолчанию:0length<integer>По умолчанию:buffer.byteLength - offsetposition<integer>| null По умолчанию:nullcallback<Function>err<Error>bytesWritten<integer>buffer<Buffer>|<TypedArray>|<DataView>
Записывает buffer в файл, указанный файловым дескриптором fd.
offset определяет часть буфера, которая будет записана, а length — это целое число, задающее количество байтов для записи.
position указывает смещение от начала файла, куда следует записать эти данные. Если typeof position !== 'number', данные будут записаны по текущей позиции. См. pwrite(2).
Callback получает три аргумента (err, bytesWritten, buffer), где bytesWritten указывает, сколько байтов было записано из buffer.
Если этот метод вызывается в версии, полученной через util.promisify(), он возвращает промис для объекта со свойствами bytesWritten и buffer.
Небезопасно использовать fs.write() несколько раз для одного и того же файла, не дожидаясь callback. Для такого сценария рекомендуется fs.createWriteStream().
В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
fs.write(fd, buffer[, options], callback)¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>options<Object>callback<Function>err<Error>bytesWritten<integer>buffer<Buffer>|<TypedArray>|<DataView>
Записывает buffer в файл, указанный файловым дескриптором fd.
Подобно приведённой выше функции fs.write, эта версия принимает необязательный объект options. Если options не указан, будут использованы значения по умолчанию, перечисленные выше.
fs.write(fd, string[, position[, encoding]], callback)¶
fd<integer>string<string>position<integer>| null По умолчанию:nullencoding<string>По умолчанию:'utf8'callback<Function>
Записывает string в файл, указанный файловым дескриптором fd. Если string не является строкой, будет выброшено исключение.
position указывает смещение от начала файла, куда следует записать эти данные. Если typeof position !== 'number', данные будут записаны по текущей позиции. См. pwrite(2).
encoding — ожидаемая кодировка строки.
Callback получает аргументы (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)¶
file<string>|<Buffer>|<URL>|<integer>имя файла или файловый дескрипторdata<string>|<Buffer>|<TypedArray>|<DataView>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>См. поддержку файловыхflags. По умолчанию:'w'.flush<boolean>Если все данные успешно записаны в файл иflushравенtrue, для сброса буфера на диск вызываетсяfs.fsync(). По умолчанию:false.signal<AbortSignal>позволяет прервать выполняющуюся операциюwriteFile
callback<Function>err<Error>|<AggregateError>
Когда file — это имя файла, метод асинхронно записывает данные в файл, заменяя его, если он уже существует. data может быть строкой или буфером.
Когда file — это файловый дескриптор, поведение аналогично прямому вызову fs.write() (что и рекомендуется). См. примечания ниже об использовании файлового дескриптора.
Опция encoding игнорируется, если data является буфером.
Опция mode влияет только на вновь создаваемый файл. Подробнее см. fs.open().
1 2 3 4 5 6 7 8 | |
Если options — строка, она задаёт кодировку:
1 2 3 | |
Небезопасно использовать fs.writeFile() несколько раз для одного и того же файла, не дожидаясь callback. Для такого сценария рекомендуется fs.createWriteStream().
Как и fs.readFile, fs.writeFile — это удобный метод, который внутри выполняет несколько вызовов write, чтобы записать переданный буфер. Для кода, чувствительного к производительности, стоит рассмотреть fs.createWriteStream().
Можно использовать AbortSignal, чтобы отменить fs.writeFile(). Отмена выполняется по принципу "best effort", и некоторое количество данных, вероятно, всё равно будет записано.
1 2 3 4 5 6 7 8 9 10 11 | |
Прерывание выполняющегося запроса не отменяет отдельные запросы операционной системы, а лишь внутреннюю буферизацию, которую выполняет fs.writeFile.
Использование fs.writeFile() с файловыми дескрипторами¶
Когда file является файловым дескриптором, поведение почти идентично прямому вызову fs.write(), например:
1 2 3 4 | |
Отличие от прямого вызова fs.write() состоит в том, что при некоторых необычных условиях fs.write() может записать только часть буфера, и для записи оставшихся данных потребуется повторный вызов, тогда как fs.writeFile() повторяет запись, пока данные не будут записаны полностью (или пока не произойдёт ошибка).
Следствия этого часто вызывают путаницу. В случае файлового дескриптора файл не заменяется! Данные не обязательно записываются в начало файла, и исходные данные файла могут остаться до и/или после вновь записанных данных.
Например, если fs.writeFile() вызвать два раза подряд, сначала записав строку 'Hello', а затем строку ', World', файл будет содержать 'Hello, World' и, возможно, часть исходных данных файла (в зависимости от размера исходного файла и позиции файлового дескриптора). Если бы вместо дескриптора использовалось имя файла, гарантировалось бы, что файл содержит только ', World'.
fs.writev(fd, buffers[, position], callback)¶
fd<integer>buffers<ArrayBufferView[]>position<integer>| null По умолчанию:nullcallback<Function>err<Error>bytesWritten<integer>buffers<ArrayBufferView[]>
Записывает массив ArrayBufferView в файл, указанный файловым дескриптором fd, с помощью writev().
position — это смещение от начала файла, куда следует записать эти данные. Если typeof position !== 'number', данные будут записаны по текущей позиции.
Callback получит три аргумента: err, bytesWritten и buffers. bytesWritten показывает, сколько байт было записано из buffers.
Если этот метод обёрнут через util.promisify(), он возвращает промис для объекта со свойствами bytesWritten и buffers.
Небезопасно использовать fs.writev() несколько раз для одного и того же файла, не дожидаясь callback. Для такого сценария используйте fs.createWriteStream().
В Linux позиционная запись не работает, если файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
Synchronous API¶
Синхронные API выполняют все операции синхронно, блокируя цикл событий до тех пор, пока операция не завершится успешно или с ошибкой.
fs.accessSync(path[, mode])¶
Синхронно проверяет права пользователя для файла или каталога, указанных в path. Аргумент mode — необязательное целое число, задающее выполняемые проверки доступности. mode должен быть либо значением fs.constants.F_OK, либо маской, составленной через побитовое OR из fs.constants.R_OK, fs.constants.W_OK и fs.constants.X_OK (например, fs.constants.W_OK | fs.constants.R_OK). Возможные значения mode см. в разделе Константы доступа к файлам.
Если любая из проверок доступности не проходит, будет выброшен Error. Иначе метод вернёт undefined.
1 2 3 4 5 6 7 8 | |
fs.appendFileSync(path, data[, options])¶
path<string>|<Buffer>|<URL>|<number>имя файла или файловый дескрипторdata<string>|<Buffer>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>См. поддержку файловыхflags. По умолчанию:'a'.flush<boolean>Еслиtrue, перед закрытием дескриптора файла выполняется сброс буфера на диск. По умолчанию:false.
Синхронно дописывает данные в файл; при отсутствии файла создаёт его. data может быть строкой или Buffer.
Опция mode влияет только на вновь создаваемый файл. Подробнее см. fs.open().
1 2 3 4 5 6 7 8 | |
Если options — строка, она задаёт кодировку:
1 2 3 | |
path может быть задан как числовой файловый дескриптор, открытый для добавления (через fs.open() или fs.openSync()). Файловый дескриптор не будет закрыт автоматически.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
fs.chmodSync(path, mode)¶
Подробности см. в документации асинхронной версии этого API: fs.chmod().
Подробнее см. POSIX chmod(2).
fs.chownSync(path, uid, gid)¶
Синхронно изменяет владельца и группу файла. Возвращает undefined. Это синхронная версия fs.chown().
Подробнее см. POSIX chown(2).
fs.closeSync(fd)¶
fd<integer>
Закрывает файловый дескриптор. Возвращает undefined.
Вызов fs.closeSync() для любого файлового дескриптора (fd), который в данный момент используется другой операцией fs, может привести к неопределённому поведению.
Подробнее см. POSIX close(2).
fs.copyFileSync(src, dest[, mode])¶
src<string>|<Buffer>|<URL>имя исходного файла для копированияdest<string>|<Buffer>|<URL>имя целевого файла операции копированияmode<integer>модификаторы операции копирования. По умолчанию:0.
Синхронно копирует src в dest. По умолчанию dest будет перезаписан, если уже существует. Возвращает undefined. Node.js не даёт гарантий атомарности операции копирования. Если ошибка произойдёт после открытия файла назначения для записи, Node.js попытается удалить файл назначения.
mode — необязательное целое число, задающее поведение операции копирования. Можно создать маску из двух или более значений, объединённых побитовым ИЛИ (например, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE).
fs.constants.COPYFILE_EXCL: операция копирования завершится ошибкой, еслиdestуже существует.fs.constants.COPYFILE_FICLONE: операция копирования попытается создать reflink с копированием по записи. Если платформа не поддерживает copy-on-write, используется запасной механизм копирования.fs.constants.COPYFILE_FICLONE_FORCE: операция копирования попытается создать reflink с копированием по записи. Если платформа не поддерживает copy-on-write, операция завершится ошибкой.
1 2 3 4 5 6 7 8 | |
fs.cpSync(src, dest[, options])¶
src<string>|<URL>Исходный путь для копирования.dest<string>|<URL>Путь назначения для копирования.options<Object>dereference<boolean>Разыменовывать символические ссылки. По умолчанию:false.errorOnExist<boolean>Еслиforceравноfalseи место назначения существует, выбрасывать ошибку. По умолчанию:false.filter<Function>Функция для фильтрации копируемых файлов и каталогов. Вернитеtrue, чтобы скопировать элемент, иfalse, чтобы его проигнорировать. Если игнорируется каталог, всё его содержимое также будет пропущено. По умолчанию:undefined.force<boolean>Перезаписывать существующий файл или каталог. Операция копирования будет игнорировать ошибки, если установитьfalse, а место назначения уже существует. Используйте опциюerrorOnExist, чтобы изменить это поведение. По умолчанию:true.mode<integer>Модификаторы операции копирования. По умолчанию:0. См. флагmodeуfs.copyFileSync().preserveTimestamps<boolean>Еслиtrue, временные метки изsrcбудут сохранены. По умолчанию:false.recursive<boolean>Копировать каталоги рекурсивно. По умолчанию:falseverbatimSymlinks<boolean>Еслиtrue, разрешение путей для символических ссылок будет пропущено. По умолчанию:false
Синхронно копирует всю структуру каталогов из src в dest, включая подкаталоги и файлы.
При копировании каталога в другой каталог glob-шаблоны не поддерживаются, а поведение аналогично cp dir1/ dir2/.
fs.existsSync(path)¶
Возвращает true, если путь существует, и false в противном случае.
Подробнее см. документацию асинхронного варианта этого API: fs.exists().
Метод fs.exists() устарел, а fs.existsSync() — нет. У fs.exists() параметр callback имеет сигнатуру, не согласованную с другими callback'ами Node.js. fs.existsSync() callback не использует.
1 2 3 4 | |
fs.fchmodSync(fd, mode)¶
Устанавливает права доступа к файлу. Возвращает undefined.
Подробнее см. POSIX fchmod(2).
fs.fchownSync(fd, uid, gid)¶
fd<integer>uid<integer>идентификатор пользователя (UID) нового владельца файла.gid<integer>идентификатор группы (GID) новой группы файла.
Устанавливает владельца файла. Возвращает undefined.
Подробнее см. POSIX fchown(2).
fs.fdatasyncSync(fd)¶
fd<integer>
Принудительно переводит все текущие поставленные в очередь операции ввода-вывода, связанные с файлом, в состояние синхронизированного завершения ввода-вывода на уровне операционной системы. Подробнее см. документацию POSIX fdatasync(2). Возвращает undefined.
fs.fstatSync(fd[, options])¶
fd<integer>options<Object>- Возвращает:
<fs.Stats>
Получает fs.Stats для файлового дескриптора.
Подробнее см. POSIX fstat(2).
fs.fsyncSync(fd)¶
fd<integer>
Запрашивает сброс всех данных открытого файлового дескриптора на устройство хранения. Конкретная реализация зависит от операционной системы и устройства. Подробнее см. документацию POSIX fsync(2). Возвращает undefined.
fs.ftruncateSync(fd[, len])¶
Усекает файловый дескриптор. Возвращает undefined.
Подробнее см. документацию асинхронного варианта этого API: fs.ftruncate().
fs.futimesSync(fd, atime, mtime)¶
Синхронный вариант fs.futimes(). Возвращает undefined.
fs.globSync(pattern[, options])¶
pattern<string>|<string[]>options<Object>cwd<string>|<URL>Текущий рабочий каталог. По умолчанию:process.cwd()exclude<Function>|<string[]>Функция для исключения файлов и каталогов из выборки либо список glob-шаблонов для исключения. Если передана функция, вернитеtrue, чтобы исключить элемент, иfalse, чтобы его включить. По умолчанию:undefined. Если передан массив строк, каждая строка должна быть glob-шаблоном, задающим исключаемые пути. Примечание: шаблоны с отрицанием (например,'!foo.js') не поддерживаются.withFileTypes<boolean>Еслиtrue, glob возвращает пути в виде объектовDirent; еслиfalse— в виде строк. По умолчанию:false.
- Возвращает:
<string[]>пути к файлам, соответствующим шаблону.
1 2 3 | |
1 2 3 | |
fs.lchmodSync(path, mode)¶
Стабильность: 0 - устарело или набрало много негативных отзывов
Изменяет права доступа символической ссылки. Возвращает undefined.
Этот метод реализован только в macOS.
Подробнее см. POSIX lchmod(2).
fs.lchownSync(path, uid, gid)¶
path<string>|<Buffer>|<URL>uid<integer>идентификатор пользователя (UID) нового владельца файла.gid<integer>идентификатор группы (GID) новой группы файла.
Устанавливает владельца для пути. Возвращает undefined.
Подробнее см. POSIX lchown(2).
fs.lutimesSync(path, atime, mtime)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>
Изменяет временные метки файловой системы для символической ссылки, на которую указывает path. Возвращает undefined либо выбрасывает исключение при неверных параметрах или сбое операции. Это синхронный вариант fs.lutimes().
fs.linkSync(existingPath, newPath)¶
Создаёт новую жёсткую ссылку с existingPath на newPath. Подробнее см. POSIX link(2). Возвращает undefined.
fs.lstatSync(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<fs.Stats>
Получает fs.Stats для символической ссылки, на которую указывает path.
Подробнее см. POSIX lstat(2).
fs.mkdirSync(path[, options])¶
Синхронно создаёт каталог. Возвращает undefined, либо, если recursive равно true, путь к первому созданному каталогу. Это синхронная версия fs.mkdir().
Подробнее см. POSIX mkdir(2).
fs.mkdtempSync(prefix[, options])¶
prefix<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<string>
Возвращает путь к созданному каталогу.
Подробнее см. документацию асинхронного варианта этого API: fs.mkdtemp().
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим используемую кодировку символов.
fs.mkdtempDisposableSync(prefix[, options])¶
prefix<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<Object>disposable-объект:path<string>путь созданного каталогаremove<Function>функция, удаляющая созданный каталог[Symbol.dispose]<Function>то же самое, чтоremove
Возвращает disposable-объект, чьё свойство path содержит путь к созданному каталогу. Когда объект освобождается, каталог и его содержимое будут удалены, если они всё ещё существуют. Если каталог не удаётся удалить, освобождение выбросит ошибку. У объекта есть метод remove(), выполняющий ту же задачу.
Подробнее см. документацию fs.mkdtemp().
Версии этого API с callback нет, потому что он разработан для использования с синтаксисом using.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, задающим используемую кодировку символов.
fs.opendirSync(path[, options])¶
Синхронно открывает каталог. См. opendir(3).
Создаёт fs.Dir, содержащий все последующие функции для чтения из каталога и его очистки.
Опция encoding задаёт кодировку для path при открытии каталога и последующих операциях чтения.
fs.openSync(path[, flags[, mode]])¶
path<string>|<Buffer>|<URL>flags<string>|<number>По умолчанию:'r'. См. поддержку файловыхflags.mode<string>|<integer>По умолчанию:0o666- Возвращает:
<number>
Возвращает целое число, представляющее файловый дескриптор.
Подробнее см. документацию асинхронного варианта этого API: fs.open().
fs.readdirSync(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>- Возвращает:
<string[]>|<Buffer[]>|<fs.Dirent[]>
Читает содержимое каталога.
Подробнее см. POSIX readdir(3).
Необязательный аргумент options может быть строкой с именем кодировки или объектом со свойством encoding, задающим кодировку имён возвращаемых файлов. Если encoding равен 'buffer', имена возвращаются как объекты Buffer.
Если options.withFileTypes равен true, в результате будут объекты fs.Dirent.
fs.readFileSync(path[, options])¶
path<string>|<Buffer>|<URL>|<integer>имя файла или файловый дескрипторoptions<Object>|<string>encoding<string>| null По умолчанию:nullflag<string>См. поддержку файловыхflags. По умолчанию:'r'.
- Возвращает:
<string>|<Buffer>
Возвращает содержимое path.
Подробнее см. документацию асинхронного варианта этого API: fs.readFile().
Если указана опция encoding, эта функция возвращает строку. В противном случае она возвращает буфер.
Аналогично fs.readFile(): если path — каталог, поведение fs.readFileSync() зависит от платформы.
1 2 3 4 5 6 7 8 | |
fs.readlinkSync(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<string>|<Buffer>
Возвращает строковое значение символической ссылки.
Подробнее см. POSIX readlink(2).
Необязательный аргумент options может быть строкой с именем кодировки или объектом со свойством encoding, задающим кодировку символов для возвращаемого пути ссылки. Если encoding равен 'buffer', путь возвращается как объект Buffer.
fs.readSync(fd, buffer, offset, length[, position])¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>offset<integer>length<integer>position<integer>|<bigint>| null По умолчанию:null- Возвращает:
<number>
Возвращает количество bytesRead.
Подробнее см. документацию асинхронного варианта этого API: fs.read().
fs.readSync(fd, buffer[, options])¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>options<Object>- Возвращает:
<number>
Возвращает количество bytesRead.
Подобно приведённой выше функции fs.readSync, эта версия принимает необязательный объект options. Если options не указан, будут использованы значения по умолчанию, перечисленные выше.
Подробнее см. документацию асинхронного варианта этого API: fs.read().
fs.readvSync(fd, buffers[, position])¶
fd<integer>buffers<ArrayBufferView[]>position<integer>| null По умолчанию:null- Возвращает:
<number>Количество прочитанных байт.
Подробнее см. документацию асинхронного варианта этого API: fs.readv().
fs.realpathSync(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<string>|<Buffer>
Возвращает разрешённый путь.
Подробнее см. документацию асинхронного варианта этого API: fs.realpath().
fs.realpathSync.native(path[, options])¶
path<string>|<Buffer>|<URL>options<string>|<Object>encoding<string>По умолчанию:'utf8'
- Возвращает:
<string>|<Buffer>
Синхронная версия realpath(3).
Поддерживаются только пути, которые можно преобразовать в строки UTF-8.
Необязательный аргумент options может быть строкой, задающей кодировку, либо объектом со свойством encoding, определяющим кодировку символов для возвращаемого пути. Если encoding равно 'buffer', возвращаемый путь будет передан как объект Buffer.
В Linux, когда Node.js слинкован с musl libc, для работы этой функции файловая система procfs должна быть смонтирована в /proc. У glibc этого ограничения нет.
fs.renameSync(oldPath, newPath)¶
Переименовывает файл из oldPath в newPath. Возвращает undefined.
Подробнее см. POSIX rename(2).
fs.rmdirSync(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>в настоящий момент никаких опций не предоставляется. Раньше существовали опцииrecursive,maxBusyTriesиemfileWait, но они были устаревшими и удалены. Аргументoptionsпо-прежнему принимается для обратной совместимости, но не используется.
Синхронная версия rmdir(2). Возвращает undefined.
Использование fs.rmdirSync() для файла (а не каталога) приводит к ошибке ENOENT в Windows и ENOTDIR в POSIX.
Чтобы получить поведение, близкое к команде Unix rm -rf, используйте fs.rmSync() с опциями { recursive: true, force: true }.
fs.rmSync(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>force<boolean>еслиtrue, исключения будут игнорироваться, еслиpathне существует. По умолчанию:false.maxRetries<integer>если возникает ошибкаEBUSY,EMFILE,ENFILE,ENOTEMPTYилиEPERM, Node.js повторяет операцию, линейно увеличивая ожидание наretryDelayмиллисекунд при каждой попытке. Эта опция задаёт число повторов. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:0.recursive<boolean>еслиtrue, выполняется рекурсивное удаление каталога. В рекурсивном режиме операции повторяются при сбоях. По умолчанию:false.retryDelay<integer>количество миллисекунд ожидания между повторными попытками. Игнорируется, еслиrecursiveне равноtrue. По умолчанию:100.
Синхронно удаляет файлы и каталоги (по образцу стандартной POSIX-утилиты rm). Возвращает undefined.
fs.statSync(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<fs.Stats>
Получает fs.Stats для указанного пути.
fs.statfsSync(path[, options])¶
path<string>|<Buffer>|<URL>options<Object>- Возвращает:
<fs.StatFs>
Синхронная версия statfs(2). Возвращает информацию о смонтированной файловой системе, содержащей path.
В случае ошибки err.code будет одним из распространённых системных ошибок.
fs.symlinkSync(target, path[, type])¶
target<string>|<Buffer>|<URL>path<string>|<Buffer>|<URL>type<string>| null По умолчанию:null- Возвращает:
undefined.
Подробнее см. документацию асинхронного варианта этого API: fs.symlink().
fs.truncateSync(path[, len])¶
Усекает файл. Возвращает undefined. В качестве первого аргумента также можно передать файловый дескриптор. В этом случае будет вызван fs.ftruncateSync().
Передача файлового дескриптора устарела и в будущем может приводить к выбрасыванию ошибки.
fs.unlinkSync(path)¶
Синхронная версия unlink(2). Возвращает undefined.
fs.utimesSync(path, atime, mtime)¶
path<string>|<Buffer>|<URL>atime<number>|<string>|<Date>mtime<number>|<string>|<Date>- Возвращает:
undefined.
Подробнее см. документацию асинхронного варианта этого API: fs.utimes().
fs.writeFileSync(file, data[, options])¶
file<string>|<Buffer>|<URL>|<integer>имя файла или файловый дескрипторdata<string>|<Buffer>|<TypedArray>|<DataView>options<Object>|<string>encoding<string>| null По умолчанию:'utf8'mode<integer>По умолчанию:0o666flag<string>См. поддержку файловыхflags. По умолчанию:'w'.flush<boolean>Если все данные успешно записаны в файл иflushравенtrue, для сброса буфера на диск вызываетсяfs.fsyncSync().
- Возвращает:
undefined.
Опция mode влияет только на вновь создаваемый файл. Подробнее см. fs.open().
Подробнее см. документацию асинхронного варианта этого API: fs.writeFile().
fs.writeSync(fd, buffer, offset[, length[, position]])¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>offset<integer>По умолчанию:0length<integer>По умолчанию:buffer.byteLength - offsetposition<integer>| null По умолчанию:null- Возвращает:
<number>Количество записанных байт.
Подробнее см. документацию асинхронного варианта этого API: fs.write(fd, buffer...).
fs.writeSync(fd, buffer[, options])¶
fd<integer>buffer<Buffer>|<TypedArray>|<DataView>options<Object>- Возвращает:
<number>Количество записанных байт.
Подробнее см. документацию асинхронного варианта этого API: fs.write(fd, buffer...).
fs.writeSync(fd, string[, position[, encoding]])¶
fd<integer>string<string>position<integer>| null По умолчанию:nullencoding<string>По умолчанию:'utf8'- Возвращает:
<number>Количество записанных байт.
Подробнее см. документацию асинхронного варианта этого API: fs.write(fd, string...).
fs.writevSync(fd, buffers[, position])¶
fd<integer>buffers<ArrayBufferView[]>position<integer>| null По умолчанию:null- Возвращает:
<number>Количество записанных байт.
Подробнее см. документацию асинхронного варианта этого API: fs.writev().
Общие объекты¶
Общие объекты используются всеми вариантами API файловой системы: на промисах, с обратными вызовами и синхронным.
Класс: fs.Dir¶
Класс, представляющий поток каталога.
Создаётся методами fs.opendir(), fs.opendirSync() или fsPromises.opendir().
1 2 3 4 5 6 7 8 9 | |
При использовании асинхронного итератора объект fs.Dir будет автоматически закрыт после завершения итерации.
dir.close()¶
- Возвращает:
<Promise>
Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.
Возвращает промис, который будет выполнен после закрытия ресурса.
dir.close(callback)¶
callback<Function>err<Error>
Асинхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.
callback будет вызван после закрытия дескриптора ресурса.
dir.closeSync()¶
Синхронно закрывает базовый дескриптор ресурса каталога. Последующие чтения приведут к ошибкам.
dir.path¶
- Тип:
<string>
Путь к этому каталогу только для чтения, переданный в fs.opendir(), fs.opendirSync() или fsPromises.opendir().
dir.read()¶
Асинхронно читает следующую запись каталога через readdir(3) как fs.Dirent.
Возвращает промис, который будет выполнен с fs.Dirent или null, если больше нет записей каталога для чтения.
Записи каталога, возвращаемые этой функцией, не имеют определённого порядка и зависят от базовых механизмов каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут не попасть в результаты итерации.
dir.read(callback)¶
callback<Function>err<Error>dirent<fs.Dirent>| null
Асинхронно читает следующую запись каталога через readdir(3) как fs.Dirent.
После завершения чтения callback будет вызван с fs.Dirent или null, если больше нет записей каталога для чтения.
Записи каталога, возвращаемые этой функцией, не имеют определённого порядка и зависят от базовых механизмов каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут не попасть в результаты итерации.
dir.readSync()¶
- Возвращает:
<fs.Dirent>| null
Синхронно читает следующую запись каталога как fs.Dirent. Подробнее см. документацию POSIX readdir(3).
Если больше нет записей каталога для чтения, будет возвращён null.
Записи каталога, возвращаемые этой функцией, не имеют определённого порядка и зависят от базовых механизмов каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут не попасть в результаты итерации.
dir[Symbol.asyncIterator]()¶
- Возвращает:
<AsyncIterator>асинхронный итератор из fs.Dirent
Асинхронно перебирает каталог, пока не будут прочитаны все записи. Подробнее см. документацию POSIX readdir(3).
Записи, возвращаемые асинхронным итератором, всегда являются fs.Dirent. Случай null из dir.read() обрабатывается внутри.
Пример см. в разделе fs.Dir.
Записи каталога, возвращаемые этим итератором, не имеют определённого порядка и зависят от базовых механизмов каталогов операционной системы. Записи, добавленные или удалённые во время итерации по каталогу, могут не попасть в результаты итерации.
dir[Symbol.asyncDispose]()¶
Вызывает dir.close(), если дескриптор каталога открыт, и возвращает промис, который выполняется после завершения освобождения ресурса.
dir[Symbol.dispose]()¶
Вызывает dir.closeSync(), если дескриптор каталога открыт, и возвращает undefined.
Класс: fs.Dirent¶
Представление записи каталога, которая может быть файлом или подкаталогом внутри каталога и возвращается при чтении из fs.Dir. Запись каталога сочетает имя файла и тип файла.
Кроме того, когда fs.readdir() или fs.readdirSync() вызываются с опцией withFileTypes, установленной в true, результирующий массив заполняется объектами fs.Dirent, а не строками или Buffer.
dirent.isBlockDevice()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает блочное устройство.
dirent.isCharacterDevice()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает символьное устройство.
dirent.isDirectory()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает каталог файловой системы.
dirent.isFIFO()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает канал FIFO (first-in-first-out).
dirent.isFile()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает обычный файл.
dirent.isSocket()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает сокет.
dirent.isSymbolicLink()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Dirent описывает символическую ссылку.
dirent.name¶
Имя файла, на который указывает этот объект fs.Dirent. Тип этого значения определяется options.encoding, переданным в fs.readdir() или fs.readdirSync().
dirent.parentPath¶
- Тип:
<string>
Путь к родительскому каталогу файла, на который указывает этот объект fs.Dirent.
Класс: fs.FSWatcher¶
- Наследует
<EventEmitter>
Успешный вызов метода fs.watch() возвращает новый объект fs.FSWatcher.
Все объекты fs.FSWatcher генерируют событие 'change' всякий раз, когда изменяется конкретный отслеживаемый файл.
Событие: 'change'¶
eventType<string>тип произошедшего события измененияfilename<string>|<Buffer>имя изменившегося файла (если применимо/доступно)
Генерируется, когда что-то изменяется в отслеживаемом каталоге или файле. Подробнее см. в fs.watch().
Аргумент filename может отсутствовать в зависимости от поддержки со стороны операционной системы. Если filename передан, он будет иметь тип Buffer, если fs.watch() вызван с опцией encoding, установленной в 'buffer', иначе filename будет строкой UTF-8.
1 2 3 4 5 6 7 8 | |
Событие: 'close'¶
Генерируется, когда наблюдатель прекращает следить за изменениями. Закрытый объект fs.FSWatcher больше нельзя использовать в обработчике события.
Событие: 'error'¶
error<Error>
Генерируется при возникновении ошибки во время наблюдения за файлом. Объект fs.FSWatcher, для которого произошла ошибка, больше нельзя использовать в обработчике события.
watcher.close()¶
Прекращает наблюдение за изменениями для данного fs.FSWatcher. После остановки объект fs.FSWatcher больше нельзя использовать.
watcher.ref()¶
- Возвращает:
<fs.FSWatcher>
При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен fs.FSWatcher. Многократный вызов watcher.ref() ни на что не влияет.
По умолчанию все объекты fs.FSWatcher уже имеют состояние "ref", поэтому обычно вызывать watcher.ref() не требуется, если ранее не вызывался watcher.unref().
watcher.unref()¶
- Возвращает:
<fs.FSWatcher>
При вызове активный объект fs.FSWatcher перестаёт требовать, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей цикл событий, процесс может завершиться до вызова callback объекта fs.FSWatcher. Многократный вызов watcher.unref() ни на что не влияет.
Класс: fs.StatWatcher¶
- Наследует
<EventEmitter>
Успешный вызов метода fs.watchFile() возвращает новый объект fs.StatWatcher.
watcher.ref()¶
- Возвращает:
<fs.StatWatcher>
При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен fs.StatWatcher. Многократный вызов watcher.ref() ни на что не влияет.
По умолчанию все объекты fs.StatWatcher уже имеют состояние "ref", поэтому обычно вызывать watcher.ref() не требуется, если ранее не вызывался watcher.unref().
watcher.unref()¶
- Возвращает:
<fs.StatWatcher>
При вызове активный объект fs.StatWatcher перестаёт требовать, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей цикл событий, процесс может завершиться до вызова callback объекта fs.StatWatcher. Многократный вызов watcher.unref() ни на что не влияет.
Класс: fs.ReadStream¶
- Наследует:
<stream.Readable>
Экземпляры fs.ReadStream нельзя создавать напрямую. Они создаются и возвращаются функцией fs.createReadStream().
Событие: 'close'¶
Генерируется, когда базовый файловый дескриптор fs.ReadStream закрыт.
Событие: 'open'¶
fd<integer>целочисленный файловый дескриптор, используемый fs.ReadStream
Генерируется, когда файловый дескриптор fs.ReadStream открыт.
Событие: 'ready'¶
Генерируется, когда fs.ReadStream готов к использованию.
Срабатывает сразу после 'open'.
readStream.bytesRead¶
- Тип:
<number>
Количество байтов, прочитанных на данный момент.
readStream.path¶
Путь к файлу, из которого читает поток, указанный в первом аргументе fs.createReadStream(). Если path передан как строка, readStream.path будет строкой. Если path передан как Buffer, readStream.path будет Buffer. Если указан fd, значение readStream.path будет undefined.
readStream.pending¶
- Тип:
<boolean>
Это свойство равно true, если базовый файл ещё не был открыт, то есть до генерации события 'ready'.
Класс: fs.Stats¶
Объект fs.Stats содержит информацию о файле.
Объекты, возвращаемые методами fs.stat(), fs.lstat(), fs.fstat() и их синхронными аналогами, имеют этот тип. Если в options, переданных этим методам, значение bigint равно true, числовые значения будут иметь тип bigint вместо number, а объект также будет содержать дополнительные свойства с наносекундной точностью, оканчивающиеся на Ns. Объекты Stat не следует создавать напрямую через new.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Версия с bigint:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
stats.isBlockDevice()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает блочное устройство.
stats.isCharacterDevice()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает символьное устройство.
stats.isDirectory()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает каталог файловой системы.
Если объект fs.Stats получен вызовом fs.lstat() для символической ссылки, которая указывает на каталог, этот метод вернёт false. Это связано с тем, что fs.lstat() возвращает информацию о самой символической ссылке, а не о пути, к которому она разрешается.
stats.isFIFO()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает FIFO-канал (first-in-first-out).
stats.isFile()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает обычный файл.
stats.isSocket()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает сокет.
stats.isSymbolicLink()¶
- Возвращает:
<boolean>
Возвращает true, если объект fs.Stats описывает символическую ссылку.
Этот метод корректен только при использовании fs.lstat().
stats.dev¶
Числовой идентификатор устройства, содержащего файл.
stats.ino¶
Специфичный для файловой системы номер inode файла.
stats.mode¶
Битовое поле, описывающее тип и режим файла.
stats.nlink¶
Количество жёстких ссылок, существующих для файла.
stats.uid¶
Числовой идентификатор пользователя, которому принадлежит файл (POSIX).
stats.gid¶
Числовой идентификатор группы, которой принадлежит файл (POSIX).
stats.rdev¶
Числовой идентификатор устройства, если файл представляет устройство.
stats.size¶
Размер файла в байтах.
Если базовая файловая система не поддерживает получение размера файла, значение будет равно 0.
stats.blksize¶
Размер блока файловой системы для операций ввода-вывода.
stats.blocks¶
Количество блоков, выделенных для этого файла.
stats.atimeMs¶
Временная метка последнего доступа к файлу в миллисекундах с эпохи POSIX.
stats.mtimeMs¶
Временная метка последнего изменения файла в миллисекундах с эпохи POSIX.
stats.ctimeMs¶
Временная метка последнего изменения состояния файла в миллисекундах с эпохи POSIX.
stats.birthtimeMs¶
Временная метка времени создания файла в миллисекундах с эпохи POSIX.
stats.atimeNs¶
- Тип:
<bigint>
Присутствует только тогда, когда в метод, создающий объект, передано bigint: true. Это временная метка последнего доступа к файлу в наносекундах с эпохи POSIX.
stats.mtimeNs¶
- Тип:
<bigint>
Присутствует только тогда, когда в метод, создающий объект, передано bigint: true. Это временная метка последнего изменения файла в наносекундах с эпохи POSIX.
stats.ctimeNs¶
- Тип:
<bigint>
Присутствует только тогда, когда в метод, создающий объект, передано bigint: true. Это временная метка последнего изменения состояния файла в наносекундах с эпохи POSIX.
stats.birthtimeNs¶
- Тип:
<bigint>
Присутствует только тогда, когда в метод, создающий объект, передано bigint: true. Это временная метка времени создания файла в наносекундах с эпохи POSIX.
stats.atime¶
- Тип:
<Date>
Временная метка последнего доступа к этому файлу.
stats.mtime¶
- Тип:
<Date>
Временная метка последнего изменения этого файла.
stats.ctime¶
- Тип:
<Date>
Временная метка последнего изменения состояния файла.
stats.birthtime¶
- Тип:
<Date>
Временная метка времени создания этого файла.
Значения времени Stat¶
Свойства atimeMs, mtimeMs, ctimeMs, birthtimeMs — это числовые значения, содержащие соответствующее время в миллисекундах. Их точность зависит от платформы. Если в метод, создающий объект, передано bigint: true, эти свойства будут иметь тип bigint, иначе это будут числа.
Свойства atimeNs, mtimeNs, ctimeNs, birthtimeNs — это значения bigint, содержащие соответствующее время в наносекундах. Они присутствуют только тогда, когда в метод, создающий объект, передано bigint: true. Их точность зависит от платформы.
atime, mtime, ctime и birthtime — это альтернативные представления различных моментов времени в виде объектов Date. Значения Date и числовые значения не связаны между собой. Если присвоить новое числовое значение или изменить объект Date, это не отразится на соответствующем альтернативном представлении.
Временные поля объекта stat имеют следующую семантику:
atime"Access Time": время последнего доступа к данным файла. Изменяется системными вызовамиmknod(2),utimes(2)иread(2).mtime"Modified Time": время последнего изменения данных файла. Изменяется системными вызовамиmknod(2),utimes(2)иwrite(2).ctime"Change Time": время последнего изменения состояния файла (модификации данных inode). Изменяется системными вызовамиchmod(2),chown(2),link(2),mknod(2),rename(2),unlink(2),utimes(2),read(2)иwrite(2).birthtime"Birth Time": время создания файла. Устанавливается один раз при создании файла. В файловых системах, гдеbirthtimeнедоступно, это поле может вместо этого содержать либоctime, либо1970-01-01T00:00Z(то есть Unix-эпоху с меткой времени0). В таком случае это значение может быть больше, чемatimeилиmtime. В Darwin и других вариантах FreeBSD оно также устанавливается, еслиatimeявно устанавливается в значение раньше текущегоbirthtimeс помощью системного вызоваutimes(2).
До Node.js 0.12 в Windows поле ctime содержало birthtime. Начиная с 0.12, ctime не означает "время создания", и в Unix-системах оно никогда этого не означало.
Класс: fs.StatFs¶
Содержит информацию о смонтированной файловой системе.
Объекты, возвращаемые fs.statfs() и его синхронным аналогом, имеют этот тип. Если в options, переданных этим методам, значение bigint равно true, числовые значения будут иметь тип bigint вместо number.
1 2 3 4 5 6 7 8 9 10 | |
Версия с bigint:
1 2 3 4 5 6 7 8 9 10 | |
statfs.bavail¶
Свободные блоки, доступные непривилегированным пользователям.
statfs.bfree¶
Свободные блоки в файловой системе.
statfs.blocks¶
Общее количество блоков данных в файловой системе.
statfs.bsize¶
Оптимальный размер блока передачи.
statfs.frsize¶
Базовый размер блока файловой системы.
statfs.ffree¶
Свободные файловые узлы в файловой системе.
statfs.files¶
Общее количество файловых узлов в файловой системе.
statfs.type¶
Тип файловой системы.
Класс: fs.Utf8Stream¶
Стабильность: 1 - Экспериментальная
Оптимизированный UTF-8-писатель потока, который позволяет по запросу сбрасывать весь внутренний буфер. Корректно обрабатывает ошибки EAGAIN, что позволяет настраивать поведение, например отбрасывать содержимое, если диск занят.
Событие: 'close'¶
Событие 'close' генерируется, когда поток полностью закрыт.
Событие: 'drain'¶
Событие 'drain' генерируется, когда внутренний буфер достаточно освободился, чтобы можно было продолжить запись.
Событие: 'drop'¶
Событие 'drop' генерируется, когда достигнута максимальная длина и эти данные не будут записаны. Отброшенные данные передаются первым аргументом обработчику события.
Событие: 'error'¶
Событие 'error' генерируется при возникновении ошибки.
Событие: 'finish'¶
Событие 'finish' генерируется, когда поток завершён и все данные сброшены в базовый файл.
Событие: 'ready'¶
Событие 'ready' генерируется, когда поток готов принимать запись.
Событие: 'write'¶
Событие 'write' генерируется, когда операция записи завершена. Количество записанных байтов передаётся первым аргументом обработчику события.
new fs.Utf8Stream([options])¶
options<Object>append: boolean добавлять запись в файлdest, а не усекать его. По умолчанию:true.contentMode: string какой тип данных можно передавать в функцию записи; поддерживаются значения'utf8'и'buffer'. По умолчанию:'utf8'.dest: string путь к файлу, в который будет вестись запись (режим управляется опциейappend).fd: number файловый дескриптор, например возвращаемыйfs.open()илиfs.openSync().fs: Object объект с тем же API, что и модульfs; полезен для моков, тестирования или настройки поведения потока.fsync: boolean выполнятьfs.fsyncSync()после каждого завершённого вызова записи.maxLength: number максимальная длина внутреннего буфера. Если операция записи приведёт к превышениюmaxLength, записываемые данные будут отброшены и будет сгенерировано событиеdropс этими данными.maxWrite: number максимальное число байтов, которое можно записать; По умолчанию:16384minLength: number минимальная длина внутреннего буфера, которую нужно набрать перед сбросом.mkdir: boolean еслиtrue, гарантирует существование каталога для файлаdest. По умолчанию:false.mode: number | string режим создаваемого файла (см.fs.open()).periodicFlush: number вызывает сброс каждыеperiodicFlushмиллисекунд.retryEAGAIN<Function>функция, вызываемая, когдаwrite(),writeSync()илиflushSync()сталкиваются с ошибкойEAGAINилиEBUSY. Если возвращаемое значение равноtrue, операция будет повторена, иначе ошибка всплывёт наружу.err— ошибка, вызвавшая этот вызов функции,writeBufferLen— длина буфера, который был записан, аremainingBufferLen— длина оставшегося буфера, который поток не пытался записать.sync: boolean выполнять запись синхронно.
utf8Stream.append¶
- boolean указывает, добавляет ли поток данные в файл или усекает его.
utf8Stream.contentMode¶
- string тип данных, которые можно записывать в поток. Поддерживаются значения
'utf8'и'buffer'. По умолчанию:'utf8'.
utf8Stream.destroy()¶
Немедленно закрывает поток без сброса внутреннего буфера.
utf8Stream.end()¶
Аккуратно закрывает поток, предварительно сбрасывая внутренний буфер.
utf8Stream.fd¶
- number файловый дескриптор, в который выполняется запись.
utf8Stream.file¶
- string файл, в который выполняется запись.
utf8Stream.flush(callback)¶
callback<Function>err<Error>| null ошибка, если сброс завершился неудачей, иначеnull
Записывает текущий буфер в файл, если запись в данный момент не выполняется. Ничего не делает, если minLength равно нулю или если поток уже пишет.
utf8Stream.flushSync()¶
Синхронно сбрасывает буферизованные данные. Это затратная операция.
utf8Stream.fsync¶
- boolean указывает, выполняет ли поток
fs.fsyncSync()после каждой операции записи.
utf8Stream.maxLength¶
- number максимальная длина внутреннего буфера. Если операция записи приведёт к превышению
maxLength, записываемые данные будут отброшены и будет сгенерировано событиеdropс отброшенными данными.
utf8Stream.minLength¶
- number минимальная длина внутреннего буфера, которую нужно заполнить перед сбросом.
utf8Stream.mkdir¶
- boolean указывает, должен ли поток обеспечивать существование каталога для файла
dest. Еслиtrue, каталог будет создан, если он отсутствует. По умолчанию:false.
utf8Stream.mode¶
utf8Stream.periodicFlush¶
- number количество миллисекунд между сбросами. Если установлено
0, периодические сбросы выполняться не будут.
utf8Stream.reopen(file)¶
file: string | Buffer | URL путь к файлу, в который будет вестись запись (режим управляется опциейappend)
Повторно открывает файл на месте; полезно для ротации логов.
utf8Stream.sync¶
- boolean указывает, пишет ли поток синхронно или асинхронно.
utf8Stream.write(data)¶
Если при создании потока options.contentMode установлен в 'utf8', аргумент data должен быть строкой. Если contentMode установлен в 'buffer', аргумент data должен быть Buffer.
utf8Stream.writing¶
- boolean указывает, записывает ли поток данные в файл в данный момент.
utf8Stream[Symbol.dispose]()¶
Вызывает utf8Stream.destroy().
Класс: fs.WriteStream¶
- Наследует
<stream.Writable>
Экземпляры fs.WriteStream нельзя создавать напрямую. Они создаются и возвращаются функцией fs.createWriteStream().
Событие: 'close'¶
Генерируется, когда базовый файловый дескриптор fs.WriteStream закрыт.
Событие: 'open'¶
fd<integer>целочисленный файловый дескриптор, используемый fs.WriteStream
Генерируется, когда файл fs.WriteStream открыт.
Событие: 'ready'¶
Генерируется, когда fs.WriteStream готов к использованию.
Срабатывает сразу после 'open'.
writeStream.bytesWritten¶
Количество байтов, записанных на данный момент. Не включает данные, которые всё ещё находятся в очереди на запись.
writeStream.close([callback])¶
callback<Function>err<Error>
Закрывает writeStream. Необязательно принимает callback, который будет выполнен после закрытия writeStream.
writeStream.path¶
Путь к файлу, в который пишет поток, указанный в первом аргументе fs.createWriteStream(). Если path передан как строка, writeStream.path будет строкой. Если path передан как Buffer, writeStream.path будет Buffer.
writeStream.pending¶
- Тип:
<boolean>
Это свойство равно true, если базовый файл ещё не был открыт, то есть до генерации события 'ready'.
fs.constants¶
- Тип:
<Object>
Возвращает объект, содержащий часто используемые константы для операций файловой системы.
Константы FS¶
Следующие константы экспортируются через fs.constants и fsPromises.constants.
Не каждая константа будет доступна в каждой операционной системе; особенно это важно для Windows, где многие определения, специфичные для POSIX, недоступны. Для переносимых приложений рекомендуется перед использованием проверять их наличие.
Чтобы использовать несколько констант одновременно, применяйте оператор побитового ИЛИ |.
Пример:
1 2 3 4 5 6 7 8 9 10 11 | |
Константы доступа к файлам¶
Следующие константы предназначены для использования в качестве параметра mode, передаваемого в fsPromises.access(), fs.access() и fs.accessSync().
| Константа | Описание |
|---|---|
F_OK | Флаг, указывающий, что файл видим для вызывающего процесса. Полезен для проверки существования файла, но ничего не говорит о правах rwx. Используется по умолчанию, если режим не указан. |
R_OK | Флаг, указывающий, что файл может быть прочитан вызывающим процессом. |
W_OK | Флаг, указывающий, что в файл можно записывать из вызывающего процесса. |
X_OK | Флаг, указывающий, что файл может быть выполнен вызывающим процессом. В Windows не оказывает эффекта (ведёт себя как fs.constants.F_OK). |
Эти определения также доступны в Windows.
Константы копирования файлов¶
Следующие константы предназначены для использования с fs.copyFile().
| Константа | Описание |
|---|---|
COPYFILE_EXCL | Если указана, операция копирования завершится ошибкой, если целевой путь уже существует. |
COPYFILE_FICLONE | Если указана, операция копирования попытается создать reflink с копированием по записи. Если базовая платформа не поддерживает copy-on-write, используется запасной механизм копирования. |
COPYFILE_FICLONE_FORCE | Если указана, операция копирования попытается создать reflink с копированием по записи. Если базовая платформа не поддерживает copy-on-write, операция завершится ошибкой. |
Эти определения также доступны в Windows.
Константы открытия файлов¶
Следующие константы предназначены для использования с fs.open().
| Константа | Описание |
|---|---|
O_RDONLY | Флаг, указывающий, что файл следует открыть только для чтения. |
O_WRONLY | Флаг, указывающий, что файл следует открыть только для записи. |
O_RDWR | Флаг, указывающий, что файл следует открыть для чтения и записи. |
O_CREAT | Флаг, указывающий, что файл следует создать, если он ещё не существует. |
O_EXCL | Флаг, указывающий, что открытие файла должно завершиться ошибкой, если установлен флаг O_CREAT и файл уже существует. |
O_NOCTTY | Флаг, указывающий, что если path обозначает терминальное устройство, его открытие не должно делать этот терминал управляющим терминалом процесса (если у процесса его ещё нет). |
O_TRUNC | Флаг, указывающий, что если файл существует и является обычным файлом, а также успешно открыт для записи, его длина будет усечена до нуля. |
O_APPEND | Флаг, указывающий, что данные будут добавляться в конец файла. |
O_DIRECTORY | Флаг, указывающий, что открытие должно завершиться ошибкой, если path не является каталогом. |
O_NOATIME | Флаг, указывающий, что операции чтения из файловой системы больше не будут приводить к обновлению связанного с файлом значения atime. Этот флаг доступен только в Linux. |
O_NOFOLLOW | Флаг, указывающий, что открытие должно завершиться ошибкой, если path является символической ссылкой. |
O_SYNC | Флаг, указывающий, что файл открывается для синхронизированного ввода-вывода, при котором операции записи ждут сохранения целостности файла. |
O_DSYNC | Флаг, указывающий, что файл открывается для синхронизированного ввода-вывода, при котором операции записи ждут сохранения целостности данных. |
O_SYMLINK | Флаг, указывающий, что следует открыть саму символическую ссылку, а не ресурс, на который она указывает. |
O_DIRECT | Если установлен, будет предпринята попытка минимизировать влияние кэширования на файловый ввод-вывод. |
O_NONBLOCK | Флаг, указывающий, что файл следует открыть в неблокирующем режиме, если это возможно. |
UV_FS_O_FILEMAP | Если установлен, для доступа к файлу используется отображение файла в память. Этот флаг доступен только в Windows. В других операционных системах он игнорируется. |
В Windows доступны только O_APPEND, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY и UV_FS_O_FILEMAP.
Константы типа файла¶
Следующие константы предназначены для использования со свойством mode объекта fs.Stats для определения типа файла.
| Константа | Описание |
|---|---|
S_IFMT | Битовая маска, используемая для извлечения кода типа файла. |
S_IFREG | Константа типа для обычного файла. |
S_IFDIR | Константа типа для каталога. |
S_IFCHR | Константа типа для символьного устройства. |
S_IFBLK | Константа типа для блочного устройства. |
S_IFIFO | Константа типа для FIFO/канала. |
S_IFLNK | Константа типа для символической ссылки. |
S_IFSOCK | Константа типа для сокета. |
В Windows доступны только S_IFCHR, S_IFDIR, S_IFLNK, S_IFMT и S_IFREG.
Константы режима файла¶
Следующие константы предназначены для использования со свойством mode объекта fs.Stats для определения прав доступа к файлу.
| Константа | Описание |
|---|---|
S_IRWXU | Режим файла, указывающий, что владелец может читать, записывать и выполнять файл. |
S_IRUSR | Режим файла, указывающий, что владелец может читать файл. |
S_IWUSR | Режим файла, указывающий, что владелец может записывать в файл. |
S_IXUSR | Режим файла, указывающий, что владелец может выполнять файл. |
S_IRWXG | Режим файла, указывающий, что группа может читать, записывать и выполнять файл. |
S_IRGRP | Режим файла, указывающий, что группа может читать файл. |
S_IWGRP | Режим файла, указывающий, что группа может записывать в файл. |
S_IXGRP | Режим файла, указывающий, что группа может выполнять файл. |
S_IRWXO | Режим файла, указывающий, что остальные могут читать, записывать и выполнять файл. |
S_IROTH | Режим файла, указывающий, что остальные могут читать файл. |
S_IWOTH | Режим файла, указывающий, что остальные могут записывать в файл. |
S_IXOTH | Режим файла, указывающий, что остальные могут выполнять файл. |
В Windows доступны только S_IRUSR и S_IWUSR.
Примечания¶
Порядок выполнения операций с обратными вызовами и промисами¶
Поскольку эти операции выполняются асинхронно базовым пулом потоков, при использовании методов на основе обратных вызовов или промисов порядок их выполнения не гарантируется.
Например, следующий код подвержен ошибкам, потому что операция fs.stat() может завершиться раньше, чем fs.rename():
1 2 3 4 5 6 7 8 9 10 | |
Важно правильно упорядочивать операции: дождаться результата одной, прежде чем вызывать другую:
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Или, если используются callback API, перенести вызов fs.stat() внутрь обратного вызова операции fs.rename():
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
Пути к файлам¶
Большинство операций fs принимают пути к файлам, которые могут быть указаны в виде строки, Buffer или объекта URL с протоколом file:.
Строковые пути¶
Строковые пути интерпретируются как последовательности символов UTF-8, задающие абсолютное или относительное имя файла. Относительные пути разрешаются относительно текущего рабочего каталога, определяемого вызовом process.cwd().
Пример использования абсолютного пути в POSIX:
1 2 3 4 5 6 7 8 9 | |
Пример использования относительного пути в POSIX (относительно process.cwd()):
1 2 3 4 5 6 7 8 9 | |
URL-пути к файлам¶
Для большинства функций модуля node:fs аргумент path или filename можно передавать как объект URL с использованием протокола file:.
1 2 3 | |
URL file: всегда являются абсолютными путями.
Платформенные особенности¶
В Windows объекты URL с протоколом file: и именем хоста преобразуются в UNC-пути, а объекты URL с протоколом file: и буквами дисков преобразуются в локальные абсолютные пути. Объекты URL с протоколом file: без имени хоста и без буквы диска приводят к ошибке:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Объекты URL с протоколом file: и буквами дисков должны использовать : как разделитель сразу после буквы диска. Использование другого разделителя приведёт к ошибке.
На всех остальных платформах объекты URL с протоколом file: и именем хоста не поддерживаются и приводят к ошибке:
1 2 3 4 5 6 7 8 9 10 11 | |
Объекты URL с протоколом file: и закодированными символами слеша приводят к ошибке на всех платформах:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
В Windows объекты URL с протоколом file: и закодированной обратной косой чертой приводят к ошибке:
1 2 3 4 5 6 7 | |
Пути через Buffer¶
Пути, заданные через Buffer, полезны прежде всего в некоторых POSIX-совместимых операционных системах, которые рассматривают пути к файлам как непрозрачные последовательности байтов. В таких системах один путь к файлу может содержать подпоследовательности с разными кодировками символов. Как и строковые пути, пути Buffer могут быть относительными или абсолютными:
Пример использования абсолютного пути в POSIX:
1 2 3 4 5 6 7 8 9 10 | |
Рабочие каталоги для каждого диска в Windows¶
В Windows Node.js придерживается концепции отдельного рабочего каталога для каждого диска. Это поведение можно наблюдать при использовании пути к диску без обратной косой черты. Например, fs.readdirSync('C:\\') потенциально может вернуть другой результат, чем fs.readdirSync('C:'). Подробнее см. на этой странице Microsoft Learn.
Файловые дескрипторы¶
В POSIX-системах ядро для каждого процесса поддерживает таблицу текущих открытых файлов и ресурсов. Каждому открытому файлу присваивается простой числовой идентификатор, называемый файловым дескриптором. На системном уровне все операции файловой системы используют эти файловые дескрипторы для идентификации и отслеживания конкретных файлов. В Windows используется другой, но концептуально похожий механизм отслеживания ресурсов. Чтобы упростить работу пользователям, Node.js скрывает различия между операционными системами и присваивает всем открытым файлам числовой файловый дескриптор.
Методы fs.open() на основе обратного вызова и синхронный fs.openSync() открывают файл и выделяют новый файловый дескриптор. После этого дескриптор можно использовать для чтения, записи или запроса информации о файле.
Операционные системы ограничивают количество файловых дескрипторов, которые могут быть одновременно открыты, поэтому после завершения операций дескриптор критически важно закрывать. Иначе возникнет утечка памяти, которая со временем может привести к сбою приложения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
API на основе промисов используют объект FileHandle вместо числового файлового дескриптора. Система лучше управляет такими объектами, чтобы предотвратить утечки ресурсов. Тем не менее, по завершении операций их всё равно необходимо закрывать:
1 2 3 4 5 6 7 8 9 10 | |
Использование пула потоков¶
Все файловые API на основе обратных вызовов и промисов (за исключением fs.FSWatcher()) используют пул потоков libuv. Для некоторых приложений это может иметь неожиданные и негативные последствия для производительности. Подробнее см. документацию UV_THREADPOOL_SIZE.
Флаги файловой системы¶
Следующие флаги доступны везде, где параметр flag принимает строку.
'a': Открыть файл для добавления. Если файла нет, он будет создан.'ax': То же, что'a', но операция завершится ошибкой, если путь уже существует.'a+': Открыть файл для чтения и добавления. Если файла нет, он будет создан.'ax+': То же, что'a+', но операция завершится ошибкой, если путь уже существует.'as': Открыть файл для добавления в синхронном режиме. Если файла нет, он будет создан.'as+': Открыть файл для чтения и добавления в синхронном режиме. Если файла нет, он будет создан.'r': Открыть файл для чтения. Если файл не существует, возникнет исключение.'rs': Открыть файл для чтения в синхронном режиме. Если файл не существует, возникнет исключение.'r+': Открыть файл для чтения и записи. Если файл не существует, возникнет исключение.-
'rs+': Открыть файл для чтения и записи в синхронном режиме. Указывает операционной системе обойти локальный кэш файловой системы.Это прежде всего полезно при открытии файлов на NFS-монтированиях, поскольку позволяет обойти потенциально устаревший локальный кэш. Этот флаг ощутимо влияет на производительность ввода-вывода, поэтому использовать его без необходимости не рекомендуется.
Это не превращает
fs.open()илиfsPromises.open()в синхронный блокирующий вызов. Если требуется синхронная операция, следует использовать, например,fs.openSync(). -
'w': Открыть файл для записи. Файл создаётся (если его нет) или усекается (если он существует). 'wx': То же, что'w', но операция завершится ошибкой, если путь уже существует.'w+': Открыть файл для чтения и записи. Файл создаётся (если его нет) или усекается (если он существует).'wx+': То же, что'w+', но операция завершится ошибкой, если путь уже существует.
flag также может быть числом, как описано в open(2); часто используемые константы доступны через fs.constants. В Windows флаги при необходимости преобразуются в эквиваленты, например O_WRONLY в FILE_GENERIC_WRITE, а O_EXCL|O_CREAT в CREATE_NEW, который принимает CreateFileW.
Эксклюзивный флаг 'x' (флаг O_EXCL в open(2)) приводит к ошибке, если путь уже существует. В POSIX, если путь является символической ссылкой, использование O_EXCL возвращает ошибку, даже если ссылка указывает на несуществующий путь. Эксклюзивный флаг может не работать с сетевыми файловыми системами.
В Linux позиционная запись не работает, когда файл открыт в режиме добавления. Ядро игнорирует аргумент позиции и всегда дописывает данные в конец файла.
Чтобы изменить существующий файл вместо его замены, может потребоваться установить flag в 'r+', а не использовать значение по умолчанию 'w'.
Поведение некоторых флагов зависит от платформы. Например, открытие каталога на macOS и Linux с флагом 'a+', как в примере ниже, завершится ошибкой. Напротив, в Windows и FreeBSD будет возвращён файловый дескриптор или FileHandle.
1 2 3 4 5 6 7 8 9 | |
В Windows открытие существующего скрытого файла с флагом 'w' (через fs.open(), fs.writeFile() или fsPromises.open()) завершится ошибкой EPERM. Для записи в существующие скрытые файлы можно использовать флаг 'r+'.
Для сброса содержимого файла можно вызвать fs.ftruncate() или filehandle.truncate().