[C#] Manipulação de Arquivos com StreamReader e StreamWriter

Dentre as várias classes com as quais podemos manipular arquivos, a StreamReader e StreamWriter são as mais comuns para fazer leitura e gravação, respectivamente. No exemplo a seguir, criei uma aplicação em WPF para ilustrar a utilização delas.

Nós vamos gravar um arquivo texto, oriundo de um StringBuilder, na pasta que o usuário preferir, utilizando para isto a classe FolderBrowserDialog nesta abordagem. Alternativamente, você pode instanciar um SaveFileDialog, que abre uma outra janela do Windows para salvar um arquivo num diretório.

Ao manipular arquivos, é recomendável escrever as instruções dentro de um bloco using, que se encarrega de dar dispose dos recursos utilizados em memória.

O construtor do StreamWriter precisa de um path válido. Então, após escolher a pasta, a variável directory será concatenada com o nome do arquivo.

Ex: C:\\Users\\Thiago\\Desktop\\Teste.txt

Obs.: O atributo append pode ser setado como true, caso queira sobrescrever um mesmo arquivo. Caso passe false ou nada, um novo arquivo será gerado.

private void btnGerarArquivo_Click(object sender, RoutedEventArgs e)
{
      string text = GetText();

       var browserDialog = new FolderBrowserDialog() 
       {
             Description = "Por favor selecione uma pasta:",
             ShowNewFolderButton = true
       };

       if (browserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
       {
              string directory = browserDialog.SelectedPath;
              string fileName = "Teste.txt".Insert(0, "\\");

              using (var writer = new StreamWriter(string.Concat(directory, fileName), true))
              {
                    writer.WriteLine(text);

                    System.Windows.MessageBox.Show("Arquivo criado com sucesso no diretório: " + directory);
              }
       }
}


 

Se não passar o nome do arquivo, só o diretório: lança a UnauthorizedAccessException.

using (var writer = new StreamWriter("C:\\Users\\Thiago\\Desktop", true))

Se passar somente o nome do arquivo, ele o salva no mesmo diretório onde está salvo o seu projeto.

Ex: VS2013\Projects\Nome_Projeto\bin\Debug\Teste.txt

using (var writer = new StreamWriter("Teste.txt", true))

 

Agora, para a leitura, criamos um OpenFileDialog para o usuário escolher o arquivo a ser aberto e o texto será mostrado num TextBox na tela. O método ReadToEnd é responsável de ler todos os caracteres do começo ao fim do arquivo. Ainda, essa operação foi feita dentro de um bloco using:

private void btnLerArquivo_Click(object sender, RoutedEventArgs e)
{
    var openFileDialog = new OpenFileDialog();

    if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
         using (var reader = new StreamReader(File.OpenRead(openFileDialog.FileName)))
         {
            txtBox1.Text = reader.ReadToEnd();
         }
    }
}

De fato, outras classes como Directory, Path e FileInfo são utilizadas exaustivamente para manipular informações de arquivos, diretórios e extensões. Há inúmeras maneiras possíveis de abordar esse cenário, inclusive.

Um abraço e até a próxima,

Thiago

Anúncios

2 Respostas para “[C#] Manipulação de Arquivos com StreamReader e StreamWriter

  1. Boa tarde,

    Não é exatamente um comentário, é uma pergunta.
    Sou leiga no assunto de Ti, por isso não saberei usar os termos adequados.
    Então vou expor a minha questão da melhor maneira possível, digna de qualquer Ti saber do que estou falando.
    Vamos supor que eu preencha um determinado questionário ou ficha cadastral, então eu preencho tudo o que me pedem, confiro, corrijo, confiro novamente, e envio o arquivo via internet para determinado destinatário – que apesar de saber quem é, não aparece o endereço, aparece apenas a confirmação assim “… enviado com sucesso”.
    É possível, que as pessoas que podem abrir este arquivo, através de senha, possa vir a manipular o que eu digitei e depois me devolver alegando que eu cometi erro de digitação ou
    pulei linha(s)?
    Será que você poderia me ajudar?
    Eu só quero saber se é possível.
    Estou muito desconfiada. Se você me explicar direitinho eu posso dar mais detalhes, como assunto, tipo de programa – nas minhas palavras e entendimento – de onde vem e para onde vai.
    Por enquanto preciso ter certeza que é possível para não meter os pés pelas mãos.
    Hoje em dia, tem muita alma ruim querendo entortar seu caminho e se defender pondo a culpa
    em erro técnico do sistema.

    Obrigada, e um abraço.

    • Olá Dora. Se você não quer que o usuário que recebeu seu arquivo manipule, faça alguma alteração no documento original, então você deve salvar o seu arquivo somente como leitura. Isso é uma configuração que você pode mexer. Assim, quando ele abrir seu documento ele não poderá fazer nada além de visualizá-lo. Agora vou pedir para que você detalhe que tipo de documento você está pensando em mandar, para que eu possa te explicar mais claramente o que você deve fazer.

      Thiago

Deixe um comentário

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