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!