Criando um Leitor de Arquivos em ASP.NET

Olá pessoal, neste artigo irei criar um leitor de arquivos usando ASP.NET. Usaremos os namespaces System.IO e o System.Collections.

Faço este artigo com base na videoaula de Luiz Maia, do Portal Linha de Código, mediante autorização do mesmo. Acompanhem o passo-a-passo:

O que faremos será um simples aplicativo que funcionará assim: o usuário irá selecionar um determinado arquivo texto ou XML em um ListBox, este arquivo estará em uma determinada pasta e, quando o usuário clicar no botão para ler o arquivo, essa pasta será “varrida” em busca do arquivo selecionado e será exibido o conteúdo do mesmo em um TextBox.

Comece criando uma aplicação Web com o nome LeitordeArquivos.

Seguindo a videoaula que faço como base para este artigo criei uma pasta na raiz da minha unidade C: com o nome Arquivos, e adicionei a ela um arquivo txt e um xml. Mais fica a critério de cada um onde irá criar a pasta e quais arquivos serão usados.

Em sua aplicação, na Default.aspx, abra o modo Design, arraste um ListBox e altere a propriedade Rows para 1. Arraste também um Button, um Label e um TextBox para que nosso form fique da seguinte forma (altere a propriedade do TextMode para Multiline, do TextBox):

Alterei o ID de cada controle para estes nomes: ListBox – ltbArquivos, Button – btnExibirArquivos, Label – lblMensagem e TextBox – txtConteudo (apenas sugestões de nomes). Ok, a parte do Design de nossa aplicação está completa. Agora dê um F7 na tela para fazermos a codificação.

Comece declarando os namespaces System.IO e System.Collections.



using System.IO;

using System.Collections;


Declare uma variável global para indicarmos a pasta que nosso leitor irá percorrer em busca dos arquivos.


public string pasta = @"C:\Arquivos";

Agora vamos criar o método responsável por percorrer os arquivos na pasta Arquivos (já declarada por meio da variável pasta) e popular o ListBox:


private void PopulaListBox()

{

try

{

//instancio uma variável da classe ArrayList

ArrayList vetor = new ArrayList();

//crio um vetor de arquivos que recebe o método GetFiles da classe Directory, passo como parâ-

//metro a varíavel pasta e o asterisco, que indica que qualquer extensão de arquivo será aceita

string[] arquivos = Directory.GetFiles(pasta, "*");

//faço um foreach para "varrer" a pasta, ou seja, para cada arquivo dentro da varíavel arquivos

foreach (String arquivo in arquivos)

{

//instancio o FileInfo, que recebe como parâmetro a variável arquivo

FileInfo fi = new FileInfo(arquivo);

//populo meu vetor com o nome de todos os arquivos contidos dentro de minha pasta

vetor.Add(fi.Name);

}

//Populo o ListBox com meu vetor e chamo o método DataBind

ltbArquivos.DataSource = vetor;

ltbArquivos.DataBind();

}

catch (Exception)

{

throw;

}

}

No Page_Load de nossa página, faça a seguinte verificação e chame o método recém-criado:


protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

PopulaListBox();

}

}

Desta forma, no Page_Load de nossa página, toda vez que não for PostBack na página, nosso método PopulaListBox será chamado, o mesmo irá percorrer os arquivos contidos da pasta Arquivos e irá popular nosso ListBox com as informações encontradas na pasta.

Agora vamos criar o método responsável por exibir o conteúdo do ListBox ao clicarmos no botão criado anteriormente:


private void ExibirConteudo()

{

try

{

//verifico se o ListBox é maior que -1, ou seja, se ele tem algum valor

if (ltbArquivos.SelectedIndex > -1)

{

//declaro a variável texto e a inicializo com o valor vazio

string texto = String.Empty;

//jogo em minha label o valor usando String.Format e concatenando com o item do ListBox

lblMensagem.Text = String.Format("Arquivo em exibição: {0}", ltbArquivos.SelectedItem.Text);

//declaro uma variável que receberá nosso arquivo do ListBox

string arquivo = pasta + "\\" + ltbArquivos.SelectedItem.Text;

//uso o método OpenText, da classe StreamReader para abrir a

//variável arquivo, que representa meu arquivo vindo da ListBox

StreamReader sr = File.OpenText(arquivo);

//defino o início da leitura do meu arquivo

sr.BaseStream.Seek(0, SeekOrigin.Begin);

//uso um While que irá ler meu arquivo

while (sr.Peek() > -1)

{

//minha variável texto recebe o método ReadLine, mais o Environment, que pula a linha

texto += sr.ReadLine() + Environment.NewLine;

}

//fecho meu StreamReader

sr.Close();

//meu TextBox recebe a variável texto, que já está preenchida com o conteúdo do arquivo

txtConteudo.Text = texto;

}

}

catch (Exception)

{

throw;

}

}

Agora volte ao modo Design, dê dois cliques no botão para irmos ao método dele e chame o método que acabamos de criar.


protected void btnExibirConteudo_Click(object sender, EventArgs e)
{
ExibirConteudo();
}

Salve seu projeto e o compile. Se for a 1ª vez que você compilou este projeto, o Visual Studio irá perguntar se você deseja modificar o Web.Config para permitir a compilação.

Clique em OK e aguarde.

Escolha no ListBox o arquivo e clique no botão Exibir Conteúdo para ver o resultado logo abaixo.

Para mais informações sobre o namespace System.IO, clique aqui. Já para saber sobre mais sobre o System.Collections, clique aqui (em inglês).

Assim finalizo o artigo.

Créditos à Luiz Maia, que fez as videoaulas e ao Portal Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.

Quaisquer dúvidas, mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais breve possível.

Até o próximo artigo!