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!

Anúncios

4 comentários sobre “Criando um Leitor de Arquivos em ASP.NET

  1. Olá,
    Preciso de uma ajuda aí.
    Estou a fazer uma aplicação que a ideia será carregar ficheiros (.html e .js) essencialmente e passa-los num “encriptador”: http://www.webscripts.com.br/gerador/criptografar.html
    A parte de carregar os ficheiros já está feita, mas o que me falta mesmo é passar cada um desses ficheiros pelo “encriptador” e gravar o resultado da encriptação nesses ficheiros e numa pasta.
    Alguém me consegue ajudar?
    Nota: Os ficheiros .html serão passado pelo encriptador apenas para não deixar o código 100% visivel, embora saibda que é reversível.

    Curtir

  2. Pingback: Compilação de tutoriais sobre C# | Diário de Nilton Felipe

  3. Wellington, tenho que validar um layout de uns arquivos texto, sendo que vou validar um de cada vez, sendo que tenho arquivos com mais de 570 colunas, estou usando o streamreader, mais fica muito lento, essa realmente é a melhor solução ?

    Curtir

    • Olá, me desculpa a demora pra responder.

      Acho que não fica lento não, pois se tratam de arquivos texto, eles não pesam a aplicação e nem sobrecarregam a memória do sistema.

      Abraços.

      Curtir

Expresse sua opinião!

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s