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