Node.jsでファイル記述子を扱う

ファイルシステムにあるファイルと対話するには、まずファイル記述子を取得する必要があります。

ファイル記述子は、開いているファイルへの参照であり、`fs` モジュールが提供する `open()` メソッドを使用してファイルを開くことによって返される数値 (fd) です。この数値 (`fd`) は、オペレーティングシステムで開いているファイルを eindeutig に識別します。

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

fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
  // fd is our file descriptor
});

`fs.open()` 呼び出しの2番目のパラメータとして使用した `r` に注目してください。

このフラグは、ファイルを読み取り用に開くことを意味します。

よく使用する他のフラグは次のとおりです。

フラグ説明ファイルが存在しない場合は作成されます
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()` の呼び出しや、ファイルシステムと対話する他の多くの操作など、それを必要とするすべての操作を実行できます。

`fs/promises` モジュールによって提供されるPromiseベースの `fsPromises.open` メソッドを使用してファイルを開くこともできます。

`fs/promises` モジュールは、Node.js v14以降でのみ使用できます。v14より前でv10以降の場合は、代わりに `require('fs').promises` を使用できます。v10より前でv8以降の場合は、`util.promisify` を使用して `fs` メソッドをPromiseベースのメソッドに変換できます。

const fs = require('node:fs/promises');
// Or const fs = require('fs').promises before 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` モジュールの詳細については、fs/promises API を確認してください。

読書時間
3分
貢献する
このページを編集