Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 2.81 KB

34.trabalhando_com_descriptors_de_arquivo_no_node.md

File metadata and controls

73 lines (54 loc) · 2.81 KB

Trabalhando com descriptors de arquivo no Node.js

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.