0

Trabalhando com arquivos em C# — Parte 01 📁🗄️

#.NET #C#
Estevão Naval
Estevão Naval

Introdução

Fala ae, garotos e garotas de programa! Tudo beleza?😅😅 Brincadeiras à parte, hoje, eu vim aqui explicar sobre como trabalhar com uma das coisas mais fundamentais para nós e o mundo inteiro, isto é, o arquivo.


É fato que em todas aplicações que você vai trabalhar, seja na web, android, IOS, etc, você vai ter de, em alguma momento, trabalhar com arquivos. Portanto, saber trabalhar com este formato de dados é imprescindível para qualquer dev de sucesso.


Sendo assim, eu vim dar uma mãozinha para você, programador C#, que tá mais perdido que cego em tiroteio nas extensas documentações da Microsoft.


Lembrando que, neste tutorial, eu vou usar o formato .txt, porém, tudo que eu fizer aqui também vale para outras extensões que se utilizam de texto, como .csv e .pdf, e até de linguagens de marcação e programação como .html.py e .php.


⚠️⚠️ATENÇÃO!!! Você pode ver todo o meu código e arquivos usados dentro do meu repositório Github. Segue o link: https://github.com/EstevaoNaval/Arquivos_em_CSharp


O link do artigo no Medium pode ser encontrado aqui: https://estevao-naval.medium.com/trabalhando-com-arquivos-em-c-parte-01-%EF%B8%8F-%EF%B8%8F-543abadb0137


Este artigo faz parte de uma lista de tutoriais sobre como manipular arquivos em C#. Você pode ver todas as outras partes através destes links:

Em desenvolvimento… 🚧🚧


diretórios 📂

Em C#, diretórios são os caminhos pelos quais você pode especificar onde está um determinado arquivo. Existem dois tipos de diretórios, isto é, os absolutos e relativos.


Nos diretórios absolutos, o caminho do arquivo começa da unidade de armazenamento. Por exemplo, “C:/usuarios/programacao/projeto/src/arquivo/arquivo.txt”.


Por outro lado, temos os diretórios relativos que começam na pasta raiz do projeto criado. Por exemplo, “./src/arquivo/arquivo.txt”. Este tipo de diretório é muito útil para quem não só mantêm um projeto na máquina de origem. Baseado nisto, eu vou utilizar este tipo de diretório no nosso programa.


Estrutura básica do projeto

Nesta primeira parte do tutorial, vamos criar uma aplicação console básica. Utilizaremos um arquivo chamado poema.txt, no qual iremos ler e escrever o conteúdo no terminal. Além de também escrevermos algo dentro do arquivo. O código básico está abaixo:


Image for post



O texto presente no arquivo poema.txt será a canção do exílio de Gonçalves Dias:



Implementação

Importando as bibliotecas necessárias 📚

Para este tutorial nós vamos utilizar a biblioteca padrão System e a System.IO. É com esta última que conseguimos efetuar a entrada e saída arquivos externos. Veja como importa-las abaixo:


Image for post


Especificando o diretório do arquivo

Com as bibliotecas já importadas, vamos criar uma variável com o caminho do arquivo. É com ele que conseguiremos instanciar o objeto FileStream que nos permitirá, efetivamente, manipular o arquivo. Veja o código abaixo:


Image for post


Note que você sempre deve especificar o caminho onde o arquivo está.


Abrindo o arquivo

Agora, vamos abrir o arquivo utilizando a instrução using. Resumidamente, a instrução using permite executar um bloco de código isolado. Podendo ser uma conexão, arquivos, no nosso caso, bibliotecas, entre outros.


Chamamos o using do mesmo modo que declaramos uma função. Olhe o código abaixo:


Image for post


Veja que, dentro do using, criamos objeto FileStream chamado arqv. Este receberá três parâmetros, sendo a string do caminho, um enum FileMode especificando se o arquivo existe e/ou se ele deve ser criado e um enum FileAcess registrando o que será feito no arquivo. Se você quiser saber mais sobre eles, você pode ver estes artigos:


https://docs.microsoft.com/pt-br/dotnet/api/system.io.filemode?view=net-5.0


https://docs.microsoft.com/en-us/dotnet/api/system.io.fileaccess?view=net-5.0


Lendo o arquivo linha por linha

Iremos usar a instrução using novamente. Todavia, passaremos como parâmetro o objeto StreamReader que permite vários modos de leitura. Veja como vai ficar:


Image for post


Dentro deste using, vamos criar uma variável chamada linha que receberá uma string de cada linha. Também vamos criar um laço while que só se encerrará quando o valor de linha for null. Note:


Image for post


A chave de toda a leitura é a função .ReadLine(). É ela que lê toda a linha, retorna uma string da linha e aponta, automaticamente, para a próxima. Além disto, o fato de colocarmos a cláusula “linha != null” para parar o laço se dá porque, quando o .ReadLine() não encontra mais linhas, ele retorna um valor null.


Você também pode usar a função .ReadToEnd() que lê todo o arquivo de uma vez e retorna um array contendo cada linha. Porém, eu só recomendo ele para pequenos arquivos, visto que os muito grandes podem gerar um erro de memória excedida (OutOfMemoryException).


Como você também pôde observar no código acima, o programa também imprimi cada linha do texto em um terminal.


Escrevendo no arquivo

Se você já entendeu como o StreamReader funciona, o objeto StreamWriter vai ser batata para você, já que a única diferença é que ele escreve ao invés de ler.


Do mesmo modo que você configurou o using e instanciou o StreamReader, faça com o StreamWriter. Contudo, você não vai precisar do laço while e a função para escrita será a .WriteLine() se você quiser escrever e pular uma linha, e .Write() se você só quiser escrever. É isto mesmo, são as mesmas funções encontradas no Console. Bem fácil, não é? Veja:


Image for post


Tome nota que, uma vez que você usa o StreamReader ou StreamWriter, você deve criar um novo bloco using com o FileStream. Pois, além do FileMode e FileAcess terem um valor diferente, a instrução using fecha o objeto citado logo após um dos objetos de manipulação de texto ser usado.


Conclusão

Na primeira parte do nosso tutorial, você aprendeu o que são diretórios absolutos e relativos, bem como aprendeu a ler e escrever em arquivos através da instrução using e os objetos StreamReader e StreamWriter.


Trabalhando com arquivos em C# — Parte 02: Em desenvolvimento… 🚧🚧


________________________________________________________________________________________________


Bom dia/tarde/noite! Meu nome é Estevão Naval e eu sou um estudante em busca da carreira de ciência de dados.

Eu acredito seriamente que o conhecimento deve ser compartilhado, por conta disto, eu tento postar vários artigos e links de artigos aqui na DIO.


Espero que eu já o tenha ajudado com os meus artigos! 😁😁


📌 Siga-me para ver mais artigos

📌 Curta para que outros possam acessar este conhecimento

📌 Dê o feedback pelos comentários


Se tiver alguma dúvida, crítica, elogio ou outra coisa, pode me chamar 📫


📌 Discord: Estevão Naval#1073

📌 Email: navalestevao@gmail.com

📌 LinkedIN: https://www.linkedin.com/in/estevao-naval/


Redes sociais 🤳🏽 🤳🏽


✨ Github: https://github.com/EstevaoNaval

✨ LinkedIN: https://www.linkedin.com/in/estevao-naval/

✨ Medium: https://estevao-naval.medium.com/

2
124

Comentários (2)

0
Daniele Silva

Daniele Silva

05/01/2021 01:48

Conteúdo top demais, Estevão. Obrigada por compartilhar!

0
Thiago Guedes

Thiago Guedes

04/01/2021 15:40

Amei demais este arquivo, Naval! Obrigado por compartilhar!

Um amante da tecnologia, bibliófilo de primeira e sedento por oportunidades.

Brasil