Primeiros passos com o namespace System.IO – Revista easy .Net Magazine - Parte II

O artigo apresenta as classes que o .NET framework possui para realizarmos manipulação de arquivos gravados no sistema operacional ou arquivos/informações alocados na memória do computador.

De que se trata o artigo: O artigo apresenta as classes que o .NET framework possui para realizarmos manipulação de arquivos gravados no sistema operacional ou arquivos/informações alocados na memória do computador, utilizando práticas que podem melhorar o desempenho e manter a segurança nas atividades relacionadas a operações IO (entradas e saídas) em aplicações .NET.

Em que situação o tema é útil: Sempre que for preciso editar, criar ou excluir algum arquivo hospedado no sistema operacional, ou manter dados gravados temporariamente na memória do computador, obtendo o máximo de performance no trabalho com dados de diversos formatos.

Primeiros passos com o namespace System.IO – Parte II: Neste artigo veremos as principais classes derivadas de Stream e que são usadas para manipulação de arquivos. Apresentaremos as classes File, Directory, StreamReader, StreamWriter e BufferedStream, explicando seus principais métodos e exemplificando o uso das mesmas.

Conforme já comentamos no primeiro artigo, as tarefas de manipulação de arquivos são tarefas muito comuns no dia-a-dia do desenvolvedor, porém é fundamental o conhecimento dos recursos nativos do framework para tornar estas tarefas mais produtivas e seguras.

Neste artigo vamos estudar como uma aplicação pode utilizar o .NET framework para ler e escrever arquivos,

Para podermos realizar a manipulação de arquivos, criando, adicionando ou removendo conteúdo, ou até mesmo apenas lendo informações contidas nestes, precisamos primeiro entender como funciona o mecanismo de transferência de dados gravados para a aplicação que está solicitando os mesmos, e vice versa.

Para que esta transferência de dados seja possível o framework possui uma série de classes que derivam de uma classe base, chamada Stream. Um Stream pode ser classificado como o objeto que realiza a conexão entre a aplicação que está necessitando manipular os dados e a fonte onde estes dados estão armazenados, podendo ser o disco rígido, a memória, a internet, o próprio teclado etc. Streams não se limitam apenas a trabalhar com arquivos, mas também são aplicados nas transferências de dados como vídeos, imagens, voz e demais dados que necessitem de transmissão de dados. A principal função dos Streams é permitir a interação da aplicação com elementos externos, sejam eles quais forem.

Agora que conhecemos um pouco mais sobre o conceito de Stream, vamos conhecer quais as principais propriedades e métodos implementados pela classe abstrata Stream do .NET. Assim como as demais classes de manipulação I/O, a classe Stream também está localizada no namespace System.IO e possui as propriedades apresentadas na Tabela 1 e os métodos apresentados na Tabela 2 a seguir:

Nota do DevMan

I/O: Esta sigla é muito utilizada na computação e significa Input/Output (Entrada/Saída). Refere-se à comunicação de entrada e saída de dados entre softwares ou hardwares. Operações de entrada e saída de dados armazenados em um disco rígido são consideradas uma operação de I/O, assim como operações de entrada e saída entre um computador e uma impressora, mouse, teclado, scanner etc.

Tabela 1. Propriedades da classe Stream

Propriedade Descrição
CanRead Esta propriedade determina quando o Stream suporta leitura de dados.
CanSeek Esta propriedade determina quando o Stream suporta seeking. Seeking é uma busca de uma posição no Stream. Através do Seek podemos posicionar o cursor de leitura ou gravação em um determinado local e ler ou gravar a partir deste local.
CanTimeOut Determina se o Stream possui um Timeout, ou seja, se a operação atual com o Stream pode expirar depois de determinado tempo.
CanWrite Determina se o Stream permite gravação de dados (escrita).
Length Esta propriedade retorna o tamanho do Stream, em bytes.
Position Retorna e permite informar qual a posição do cursor no Stream. Esta posição não pode ser maior que o tamanho retornado pela propriedade Length.
ReadTimeout Informação de qual é o tempo limite para operações de leitura do Stream.
WriteTimeout Informação de qual é o tempo limite para operações de gravação (escrita) do Stream.

Tabela 2. Métodos da classe Stream

Método Descrição
Close Fecha o Stream e libera todos os recursos associados a ele.
Flush Limpa qualquer buffer existente para o Stream e força as alterações para que sejam gravadas na fonte de dados.
Read Este método executa uma leitura sequencial no Stream, conforme o número de bytes definido e a partir da posição atual do cursor no Stream, atualizando esta mesma posição após a leitura.
ReadByte Executa a leitura de apenas um byte no Stream, partindo da posição atual e atualizando esta posição após a leitura. É o mesmo que executar o método Read passando como parâmetros apenas um byte.
Seek Método que permite definir a posição do cursor no Stream sem a necessidade de se realizar a leitura até esta posição.
SetLength Define o tamanho do Stream. Caso o tamanho informado seja menor que o tamanho de dados contido no Stream este será truncado. Se for maior, apenas será expandido para o novo tamanho.
Write Método que permite a gravação de informação no Stream, informando o número de bytes desta informação e atualizando o mesmo para a nova posição após a gravação.
WriteByte Realiza o mesmo que no método Write, porém grava apenas um byte no Stream.

Nota do DevMan

Buffer: Termo utilizado para denominar uma região da memória do computador que está alocada para o armazenamento temporário de dados, sendo possível realizar leituras e gravações neste espaço.

A Figura 1 ilustra como os diferentes tipos de Streams, contidos no .net framework, se relacionam para fornecer uma estrutura organizada de leitura e gravação de dados em diversas fontes de dados e também em algumas classes de leitura (reader) e escrita (writer) que servem de apoio para o trabalho com Streams. Durante este artigo veremos os principais e mais utilizados Streams e suas classes de apoio.

Figura 1. Streams do .net framework e classes de apoio para leitura e escrita. (Fonte: http://www.cnblogs.com/erebus/articles/2176646.html)

Classes de Apoio para Streams

As classes de Streams podem ser utilizadas sozinhas ou em conjunto com classes de apoio, que são classes que nos fornecem serviços que facilitam a interação com os Streams.

Com a classe File podemos realizar uma série de operações com arquivos, como a leitura e escrita do conteúdo de um arquivo, a criação ou a abertura de um arquivo com permissões de somente leitura, a criação ou escrita de um arquivo com permissões de escrita, além de operações básicas com arquivos como a verificação se o arquivo pesquisado existe, exclusão de arquivos, dentre outras.

A classe File auxilia o trabalho com os Streams pelo fato de possuir alguns métodos específicos que retornam instâncias de classes do tipo Stream já abertas e prontas para a utilização. O objeto do tipo Stream mais básico retornado pela classe File é o objeto FileStream, que vamos estudar profundamente mais tarde, mas que tem como objetivo representar um arquivo no sistema de arquivos e nos possibilita interagir com o mesmo. Além deste objeto mais genérico, FileStream, a classe File também possui métodos que retornam Streams, mais específicos como o objeto StreamReader, que é um objeto que também representa um arquivo, porém com permissões de operações relacionadas somente à leitura dos dados deste arquivo, ou seja, somente será possível ler dados com este tipo de "

[...] continue lendo...

Artigos relacionados