Travailler avec les descripteurs de fichiers dans Node.js
Avant de pouvoir interagir avec un fichier situé dans votre système de fichiers, vous devez obtenir un descripteur de fichier. Un descripteur de fichier est une référence à un fichier ouvert, un nombre (fd) renvoyé par l'ouverture du fichier à l'aide de la méthode open()
offerte par le module fs
. Ce nombre (fd) identifie de manière unique un fichier ouvert dans le système d'exploitation.
Ouverture de fichiers
CommonJS (CJS)
const fs = require('node:fs')
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd est notre descripteur de fichier
})
Notez le 'r'
que nous avons utilisé comme deuxième paramètre de l'appel fs.open()
. Cet indicateur signifie que nous ouvrons le fichier en lecture. D'autres indicateurs que vous utiliserez couramment sont :
Indicateur | Description |
---|---|
'w+' | Cet indicateur ouvre le fichier en lecture et en écriture. Il positionne le flux au début du fichier. |
'a+' | Cet indicateur ouvre le fichier en lecture et en écriture et positionne également le flux à la fin du fichier. |
Vous pouvez également ouvrir le fichier en utilisant la méthode fs.openSync
, qui renvoie le descripteur de fichier au lieu de le fournir dans une fonction de rappel :
const fs = require('node:fs')
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r')
} catch (err) {
console.error(err)
}
Exécution des opérations
Une fois que vous avez obtenu le descripteur de fichier de la manière que vous choisissez, vous pouvez effectuer toutes les opérations qui l'exigent, comme appeler fs.close()
et de nombreuses autres opérations qui interagissent avec le système de fichiers.
Utilisation de fsPromises
Vous pouvez également ouvrir le fichier à l'aide de la méthode fsPromises.open
basée sur les promesses offerte par le module fs/promises
. Le module fs/promises
est disponible uniquement à partir de Node.js v14. Avant la v14, après la v10, vous pouvez utiliser require('fs').promises
à la place. Avant la v10, après la v8, vous pouvez utiliser util.promisify
pour convertir les méthodes fs
en méthodes basées sur les promesses.
Modules ES (MJS)
import fs from 'node:fs/promises'
async function run() {
const fileHandle = await fs.open('example.txt', 'r')
try {
filehandle = await fs.open('/Users/joe/test.txt', 'r')
console.log(filehandle.fd)
console.log(await filehandle.readFile({ encoding: 'utf8' }))
} finally {
await fileHandle.close()
}
}
run().catch(console.error)
Exemple de util.promisify
Voici un exemple d'utilisation de util.promisify
pour convertir fs.open
en une fonction basée sur les promesses :
const fs = require('node:fs')
const util = require('node:util')
const open = util.promisify(fs.open)
open('test.txt', 'r')
.then(fd => {
// Utiliser le descripteur de fichier
})
.catch(err => {
// Gérer l'erreur
})
Pour plus de détails sur le module fs/promises
, veuillez consulter la documentation de l'API fs/promises.