На этой странице

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

    Файловый дескриптор — это ссылка на открытый файл, число (fd), возвращаемое при открытии файла методом open(), предоставляемым модулем fs. Это число (fd) однозначно идентифицирует открытый файл в операционной системе:

    const fs = require('node:fs');
    
    fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
      // fd — наш файловый дескриптор
    });

    Обратите внимание на r, который мы использовали как второй параметр вызова fs.open().

    Этот флаг означает, что мы открываем файл для чтения.

    Другие часто используемые флаги:

    ФлагОписаниеФайл создаётся, если не существует
    r+Этот флаг открывает файл для чтения и записи❌
    w+Этот флаг открывает файл для чтения и записи, а также ставит поток в начало файла✅
    aЭтот флаг открывает файл для записи, а также ставит поток в конец файла✅
    a+Этот флаг открывает файл для чтения и записи, а также ставит поток в конец файла✅

    Открыть файл можно также методом fs.openSync, который возвращает файловый дескриптор, вместо того чтобы передавать его в колбэке:

    const fs = require('node:fs');
    
    try {
      const fd = fs.openSync('/Users/joe/test.txt', 'r');
    } catch (err) {
      console.error(err);
    }

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

    Открыть файл можно также методом fsPromises.open на основе промисов, предлагаемым модулем fs/promises.

    Модуль fs/promises доступен только начиная с Node.js v14. До v14, но после v10, вместо него можно использовать require('fs').promises. До v10, но после v8, можно использовать util.promisify для преобразования методов fs в методы на основе промисов.

    const fs = require('node:fs/promises');
    // Или const fs = require('fs').promises до v14.
    async function example() {
      let filehandle;
      try {
        filehandle = await fs.open('/Users/joe/test.txt', 'r');
        console.log(filehandle.fd);
        console.log(await filehandle.readFile({ encoding: 'utf8' }));
      } finally {
        if (filehandle) {
          await filehandle.close();
        }
      }
    }
    example();

    Вот пример с util.promisify:

    const fs = require('node:fs');
    const util = require('node:util');
    
    async function example() {
      const open = util.promisify(fs.open);
      const fd = await open('/Users/joe/test.txt', 'r');
    }
    example();

    Больше подробностей о модуле fs/promises см. в API fs/promises.