Trabalhando com descritores de arquivo no Node.js
Antes de você poder interagir com um arquivo que está no seu sistema de arquivos, você deve obter um descritor de arquivo. Um descritor de arquivo é uma referência a um arquivo aberto, um número (fd) retornado ao abrir o arquivo usando o método open()
oferecido pelo módulo fs
. Este número (fd) identifica exclusivamente um arquivo aberto no sistema operacional.
Abrindo Arquivos
CommonJS (CJS)
const fs = require('node:fs');
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd é nosso descritor de arquivo
});
Observe o 'r'
que usamos como o segundo parâmetro para a chamada fs.open()
. Essa flag significa que abrimos o arquivo para leitura. Outras flags que você usará comumente são:
Flag | Descrição |
---|---|
'w+' | Esta flag abre o arquivo para leitura e escrita. Ela posiciona o fluxo no início do arquivo. |
'a+' | Esta flag abre o arquivo para leitura e escrita e também posiciona o fluxo no final do arquivo. |
Você também pode abrir o arquivo usando o método fs.openSync
, que retorna o descritor de arquivo em vez de fornecê-lo em um callback:
const fs = require('node:fs');
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r');
} catch (err) {
console.error(err);
}
Realizando Operações
Depois de obter o descritor de arquivo da maneira que você escolher, você pode realizar todas as operações que o exigem, como chamar fs.close()
e muitas outras operações que interagem com o sistema de arquivos.
Usando fsPromises
Você também pode abrir o arquivo usando o método fsPromises.open
baseado em promessa oferecido pelo módulo fs/promises
. O módulo fs/promises
está disponível apenas a partir do Node.js v14. Antes da v14, depois da v10, você pode usar require('fs').promises
em vez disso. Antes da v10, depois da v8, você pode usar util.promisify
para converter métodos fs
em métodos baseados em promessa.
ES Modules (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);
Exemplo de util.promisify
Aqui está um exemplo de como usar util.promisify
para converter fs.open
em uma função baseada em promessa:
const fs = require('node:fs');
const util = require('node:util');
const open = util.promisify(fs.open);
open('test.txt', 'r')
.then((fd) => {
// Usar o descritor de arquivo
})
.catch((err) => {
// Lidar com o erro
});
Para ver mais detalhes sobre o módulo fs/promises
, por favor, verifique a documentação da API fs/promises.