Node.jsでファイルディスクリプタを扱う

ファイルシステムにあるファイルと対話する前に、ファイルディスクリプタを取得する必要があります。

ファイルディスクリプタとは、開かれたファイルへの参照であり、fsモジュールが提供するopen()メソッドを使用してファイルを開くことによって返される数値(fd)です。この数値(fd)は、オペレーティングシステム内で開かれたファイルを一意に識別します。

const  = ('node:fs');

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

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

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

よく使う他のフラグは以下の通りです。

フラグ説明存在しない場合はファイルが作成されます
r+このフラグはファイルを読み書き用に開きます
w+このフラグはファイルを読み書き用に開き、ストリームをファイルの先頭に配置します
aこのフラグはファイルを書き込み用に開き、ストリームをファイルの末尾に配置します
a+このフラグはファイルを読み書き用に開き、ストリームをファイルの末尾に配置します

また、fs.openSyncメソッドを使ってファイルを開くこともできます。このメソッドは、コールバックでファイルディスクリプタを提供する代わりに、それを返します。

const  = ('node:fs');

try {
  const  = .('/Users/joe/test.txt', 'r');
} catch () {
  .();
}

どちらの方法でファイルディスクリプタを取得しても、fs.close()の呼び出しやファイルシステムと対話する他の多くの操作など、それを必要とするすべての操作を実行できます。

また、fs/promisesモジュールが提供するPromiseベースのfsPromises.openメソッドを使ってファイルを開くこともできます。

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

const  = ('node:fs/promises');
// Or const fs = require('fs').promises before v14.
async function () {
  let ;
  try {
     = await .('/Users/joe/test.txt', 'r');
    .(.);
    .(await .({ : 'utf8' }));
  } finally {
    if () {
      await .();
    }
  }
}
();

以下はutil.promisifyの例です。

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

async function () {
  const  = .(.);
  const  = await ('/Users/joe/test.txt', 'r');
}
();

fs/promisesモジュールの詳細については、fs/promises APIを確認してください。

読了時間
2分
作成者
コントリビュート
このページを編集