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を確認してください。