Minicursos - C#

Escrevendo e Lendo Arquivos de Texto


Chegamos ao final deste minicurso de C#. Para encerra-lo, vamos continuar trabalhando no formulário frmSobre apenas por uma questão prática. O objetivo aqui será deixar que o usuário personalize a imagem que será exibida na PictureBox e claro que um programa comercial não permitiria tal operação, mas apenas para que aprendamos como gerar e ler arquivos texto, o exemplo neste formulário será propício. Faremos, também, com que o sistema carregue automaticamete a imagem escolhida sempre que este formulário for aberto. Para isso teremos que salvar o nome do arquivo que contém a foto, bem como o caminho até a pasta em que ele se encontra. Nós até poderíamos armazenar isso em um arquivo RTF, que já sabemos como criar, mas vamos aumentar nosso horizonte de conhecimentos! Agora vamos criar um arquivo TXT contendo essa informação, pois assim aprenderemos também a lidar com algumas ferramentas do Namespace System.IO.

Bem, como primeiro passo vamos inserir este Namespace em nossa aplicação, no formulário frmSobre, da seguinte forma:

Escrevendo e lendo arquivos texto C#

Feito isso vamos criar uma variável global, privada, que armazenará o caminho do arquivo, da seguinte forma:

Escrevendo e lendo arquivos texto C#

Agora vamos localizar o melhor ponto para obtermos o nome do arquivo de imagem selecionado pelo usuário, que é o indicado pela imagem abaixo:

Escrevendo e lendo arquivos texto C#

O ponto é o indicado pela flecha, no método FileOk da ferramenta OpenFileDialog. Bem, mas por que eu escolhi este ponto e não outro qualquer? Acontece que neste ponto podemos facilmente obter o caminho do arquivo através do método FileName do "ofdLogo", presente no comando logo acima. Para conseguir isso faremos a seguinte inserção:

Escrevendo e lendo arquivos texto C#

Com isso teremos, na variável strCaminhoArquivo, o caminho do arquivo selecionado pelo usuário. Na sequência faremos alterações no código referente ao botão "Salvar" do frmSobre. O primeiro passo será remover o código que faz o salvamento do RichTextBox, afinal de contas agora ele já está gerado e é somente leitura. Portanto, as linhas a serem removidas são:

Escrevendo e lendo arquivos texto C#

O código a ser inserido é:

Escrevendo e lendo arquivos texto C#

Comentando-o, teremos:

Escrevendo e lendo arquivos texto C#

Aqui vale uma importante observação: claro que verificar se um arquivo existe, apaga-lo e cria-lo novamente apenas para armazenarmos uma pequena informação de configuração não é a estratégia mais profissional, no entanto o objetivo aqui foi, “pegando carona” no tópico anterior sobre a geração de arquivos RTF, fazer uma pequena demonstração de como gerar arquivos TXT também. Em C# existem classes e dezenas de métodos para manipulação de dados em arquivos que nos permitiriam fazer de tudo o que imaginássemos com os dados, evitando essa exclusão desnecessária, no entanto a parte de manipulação de arquivos daria um minicurso, então não coloquemos foco nisso agora. Quis fazer este comentário apenas para que não fique a impressão de que essa estratégia utilizada é a única que temos. Repito que não é e ela sequer é boa, mas eu a utilizei para demonstrar a criação de um arquivo TXT que, para o nosso exemplo, apenas fará o armazenamento do endereço da imagem selecionada pelo usuário com o logotipo da aplicação.

Bem, mas vamos continuar...

Vou definir como logotipo um arquivo que tenho na minha área de trabalho, chamado Logo.png.

Escrevendo e lendo arquivos texto C#

Agora vou abrir o arquivo c:\CB\Config.txt

Escrevendo e lendo arquivos texto C#

Aí está o correto endereço do arquivo selecionado como logotipo, no entanto ele ainda não é carregado automaticamente, assim como acontece com o conteúdo do RichTextBox.

Vamos criar o código para isso. Para efetuarmos a leitura de um arquivo texto, devemos fazer uso da classe StreamReader(ou TextReader). Através dela poderemos ler um arquivo e gerar uma sequência de caracteres, que pode ser armazenada em uma variável do tipo string.

A forma de utilização é bastante simples. Como queremos que a ação de leitura e preenchimento da PictureBox aconteça quando o formulário for carregado, vamos inserir, no método Load do mesmo, o seguinte comando:

Escrevendo e lendo arquivos texto C#

Comentando-o, teremos:

Escrevendo e lendo arquivos texto C#

Agora vamos executar a aplicação e abrir o formulário de “Sobre o Programa” para ver o que acontece...

Escrevendo e lendo arquivos texto C#

Aí está o nosso logotipo automaticamente carregado!

No entanto, vamos tentar alterar a imagem e salva-la, apenas para testar mais uma vez e termos a certeza de que tudo funciona bem. Vejamos o que acontece quando eu tento selecionar outra imagem qualquer e clico no botão "Salvar"...

Escrevendo e lendo arquivos texto C#

Ooops! Não funcionou! Pois é, mas isso já era esperado. Vejam que a mensagem que o Visual C# nos retorna é que o arquivo Config.txt não pode ser acessado por já estar aberto. Isso acontece porque no método Load do formulário estamos usando o objReader para efetuar a leitura do arquivo Config.txt e ele permanece “lendo” o arquivo, ou seja, permanece aberto e vinculado ao objReader, por isso quando tentamos fazer a alteração do conteúdo, não é possível. Isso é extremamente fácil de resolver! A classe StreamReader possui um método camado Dispose, que é responsável por liberar os recursos utilizados pelo objeto, que no nosso exemplo é o objReader, e outro chamado Close, que fecha o objeto.

Vamos inseri-los após a colocação do endereço na variável strTemp, como ilustra a imagem abaixo:

Escrevendo e lendo arquivos texto C#

Com essa pequena alteração podemos evitar aquele erro, já que o arquivo Config.txt estará liberado pela aplicação após a leitura e o formulário funcionará corretamente!

Agora, para evitar que o usuário tente salvar um endereço vazio, vamos alterar a propriedade Enabled do botão btnSalvar para "False", e habilita-la para "True" somente quando uma foto for selecionada, no seguinte trecho de código:

Escrevendo e lendo arquivos texto C#

Fazendo isso, o botão "Salvar" somente estará habilitado após o usuário ter selecionado um arquivo de imagem para a PictureBox.

Com isso encerramos o minicurso de C#. Vocês encontrarão outros tópicos em seções como a "Dicas/Tutoriais", que são totalmente aleatórios, apenas envolvendo assuntos que achei interessantes. Recomendo que vocês os leiam também e, para encerrar por completo, acessem a página de Comentários, que é o tópico seguinte.



Algumas notícias

O que acontece com o cérebro no exato momento em que morremos

O que passa em nossa cabeça no momento da morte? Não se sabe exatamente e, embora os cientistas tenham alguma resposta, a resposta continua sendo um grande mistério. Além de difícil solução, tentar respondê-la pode criar implicações éticas. No entanto, uma equipe de cientistas da Universidade...

Ler Notícia Completa

Operada e devolvida ao útero, menina que nasceu duas vezes hoje 'acorda sorrindo toda manhã'

Um bebê pode nascer duas vezes? Não é o caso da absoluta maioria das crianças, mas foi assim para a pequena Lynlee Boemer. Em outubro de 2015, sua mãe, Margaret Boemer, descobriu que estava grávida de gêmeos. Ela sofreu um aborto espontâneo, mas um dos bebês sobreviveu. Com dez semanas de ges...

Ler Notícia Completa

Médicos dizem estar perto de chegar a exame de sangue para todos os tipos de câncer

Cientistas dizem que estão mais perto de criar um exame de sangue universal, capaz de identificar todos os tipos de câncer. Estudo conduzido com 1.005 pacientes por uma equipe da Universidade Johns Hopkins, dos Estados Unidos, testou um método que detecta oito tipos de proteínas e 16 mutações ge...

Ler Notícia Completa

Formato JPEG está com os dias contados

Há quantos anos você ouve falar em arquivos JPG? O formato já era utilizado nos primórdios da web comercial nos anos 1990, vivendo há mais de 20 anos como o principal método de compressão de imagens do público. No que depender de Google, Mozilla e outras empresas, isso pode mudar dentro de algum...

Ler Notícia Completa

EUA aprovam 'droga viva', 1ª terapia contra câncer que reestrutura sistema imunológico do paciente

Os Estados Unidos aprovaram o primeiro tratamento que reestrutura o sistema imunológico do paciente para atacar o câncer. A agência reguladora de medicamentos do país - a FDA - diz que a decisão foi um momento "histórico" e que a medicina agora "entra em uma nova fronteira". A companhia Novar...

Ler Notícia Completa

Cientistas norte-americanos criaram anticorpo capaz de atacar 99% das variações de HIV

Um grupo formado por pesquisadores do Instituto Nacional de Saúde (NIH), dos Estados Unidos, e da empresa farmacêutica Sanofi criaram em laboratório anticorpos superdesenvolvidos capazes de atacar 99% das cepas de HIV. O feito é ainda mais significativo por ser capaz até mesmo de prevenir a infec...

Ler Notícia Completa

Facebook investirá mais de US$ 1 bilhão em conteúdo original em 2018

Anunciada em agosto, a plataforma original de vídeos do Facebook, Watch, parece ser a grande aposta de Mark Zuckerberg para o ano que vem. De acordo com o TechCrunch, a empresa deve investir US$ 1 bilhão para criar e incentivar iniciativas voltadas para a produção de conteúdo audiovisual exclu...

Ler Notícia Completa

Software da Adobe é capaz de manipular gravações de voz e criar frases com perfeição

O software se chama Voco, foi desenvolvido pela Adobe (a mesma criadora do Photoshop) e permite manipular gravações de voz com uma precisão inédita, inclusive criando frases que a pessoa não disse. Na demonstração do app, um técnico forjou uma gravação em que um homem dizia “eu beijei a Jordan...

Ler Notícia Completa

Você sabia?

O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.

Você gostará destes vídeos: