Antes de poder interagir com um arquivo que está em 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) retronado pela abertura do arquivo usando o método open()
oferecido pelo módulo fs
. Este número (fd
) indentifica exclusivamente um arquivo aberto no sistema operacional:
const fs = require('fs');
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd is our file descriptor
});
Observe o r
que usamos como segundo parâmetro para a chamada fs.open()
.
Essa flag/sinalizador significa que abrimos o arquivo para leitura.
Outros sinalizadores que você costuma usar são:
r+
abre o arquivo para leitura e escrita, se o arquivo não existir ele não será criado.
w+
abre o arquivo para leitura e escrita, posicionando o stream no início do arquivo. O arquivo é criado se não existir.
a
abre o arquivo para escrita, posicionando o stream no final do arquivo. O arquivo é criado se não existir.
a+
abre o arquivo para leitura e escrita, posicionando o stream no final do arquivo. O arquivo é criado se não existir.
Você também pode abrir o arquivo usando o método fs.openSync
, que retorna o descritor do arquivo, em vez de fornecê-lo em um callback:
const fs = require('fs');
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r');
} catch (err) {
console.error(err);
}
Depois de obter o descritor de arquivo, da maneira que você escolher, você pode executar todas as operações que requerem ele, como chamar fs.close()
e muitas outras operações que interagem com o sistema de arquivo.
Você também pode abrir o arquivo usando o método fsPromises.open
baseado em promises 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
. Antes da v10, depois da v8, você pode usar util.promisify
para converter métodos fs
em métodos baseados em promises.
const fs = require('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 {
await filehandle.close();
}
}
example();
Aqui um exemplo usando util.promisify
:
const fs = require('fs');
const util = require('util');
async function example() {
const open = util.promisify(fs.open);
const fd = await open('/Users/joe/test.txt', 'r');
}
example();
Para ver mais detalhes sobre o módulo fs/promises
, por favor cheque fs/promises API.