Primeiras aulas do curso Certificação C# Programming parte 8: Entrada e Saída de Dados

Certificação C# Programming parte 8: Entrada e Saída de Dados

Ler e Gravar Bytes em Fluxos de Arquivos - Introdução

Olá, eu sou Marcelo Oliveira, bem-vindos a parte 8 do nosso curso de Certificação 70-483 da prova de programação em C# da Microsoft, nessa parte 8, nós vamos aprender sobre entrada e saída de dados.

Vamos começar a aprender sobre como ler e gravar dados em arquivos do nosso sistema de arquivos, utilizando os fluxos que também são chamados de strings, a gente vai aprender a ler e também a gravar dados na internet utilizando as classes do namespace system.net.

E também, vamos aprender a implementar as operações de entrada e saída de forma assíncrona para evitar que a nossa aplicação seja bloqueada e assim, manter os nossos aplicativos sempre responsivos.

A gente também vai aprender a consumir informações do banco de dados, fazendo a conexão e abrindo a conexão para realizar consultas e também atualizando as informações da tabela do banco de dados. Também vamos aprender a consumir informações nos formatos Jason e XML, interpretando esses dois formatos.

E também, vamos aprender a criar uma conexão com serviço do tipo WCF, para poder acessar a partir da nossa aplicação com código C#. Muito obrigado, espero que vocês gostem.

Ler e Gravar Bytes em Fluxos de Arquivos - A Classe FileStream

Olá, a gente vai começar essa parte 8 do curso para falar sobre entrada e saída de dados e vamos começar com o acesso a arquivos do sistema de arquivos do nosso computador.

Então, nós vamos utilizar o código C# para abrir um arquivo que já existe na nossa solução para essa parte 8 do curso e qual é esse arquivo que a gente vai ter que abrir? [00:27] Vamos dar uma olhada aqui, é o arquivo diretores.txt, que nós vamos encontrar aqui dentro da pasta da solução, nós temos aqui um projeto chamado parte 8 e aqui nós temos o arquivo diretores.txt. Vamos abrir esse arquivo para ver o seu conteúdo.

Clicando duas vezes, eu vou abrir esse arquivo que está agora aqui na tela para a gente ver e eu tenho aqui esse arquivo diretores, ele contém uma lista com três diretores de Hollywood, três diretores de cinema, Quentin Tarantino, James Cameron e também o Tim Burton, são três diretores famosos.

E a gente vai abrir aqui o nosso código C#, que está neste arquivo, item 00, item 00.cs. Vamos abrir esse arquivo para começar a resolver algumas tarefas, alguns problemas que a gente vai encontrar com relação a abertura e leitura de arquivos.

Então, nós temos aqui três tarefas que foram colocadas para gente resolver, a primeira delas é abrir o arquivo diretores.txt, depois nós vamos ler um pedaço desse arquivo, que são os 10 primeiros bytes desse arquivo e em seguida a gente vai imprimir esses bytes no console da aplicação.

Então, o que a gente vai fazer agora é dar uma olhada no arquivo diretores.txt, vamos abrir o menu clicando com o botão direito em cima do diretores.txt, nós vamos clicar em propriedades e vamos encontrar aqui... Opa, diretores, propriedades, vamos teclar aqui o F4 para abrir a janela de propriedades.

E olha só, nas propriedades do arquivo diretores.txt, você vai verificar que ele tem aqui uma informação importante, que é ação de compilação. A ação de compilação vai dizer qual é o comportamento que o Visual Studio, vai assumir quando ele estiver trabalhando com este arquivo.

Se você abrir esse drop down, você vai ver as opções, como por exemplo, você poderia ter aí um código C# no seu projeto, mas nesse caso, nós não temos aqui... o diretores.txt não é código, ele é simplesmente o arquivo de conteúdo. Por isso mesmo a ação de compilação aqui está marcada como conteúdo.

E a outra informação importante, outra propriedade importante aqui desse arquivo diretores.txt é a propriedade copiar para o diretório de saída. Olha só e temos aqui a opção que foi selecionada, que já está selecionada quando abrimos esse arquivo, que é Copiar se for mais novo.

Isso é importante por quê? Quando a gente compila aplicação, para onde é que vai o arquivo? Se eu compilar aqui com o “Ctrl + Shift + B”, estou compilando o nosso projeto, o que vai acontecer com o arquivo diretores.txt? Ele vai ser jogado na pasta contendo os binários.

Então, vamos abrir aqui o nosso projeto parte 8 e vamos abrir aqui este menu, temos aqui um menu que é o Mostrar Todos os Arquivos, quando a gente clica nesse ícone, a gente vai poder visualizar os itens que não fazem parte do projeto, mas que estão dentro da nossa pasta da solução, da pasta do projeto.

Então, temos aqui, por exemplo, temos aqui uma pasta chamada bin, que é a pasta de binários, vamos abrir a pasta bin, dentro, temos a pasta Debug, a pasta netcoreapp2.0dentro e dentro, ainda, nós vamos encontrar agora o arquivo diretores.txt, que foi copiado assim que a gente fez a compilação do nosso projeto.

O que a gente vai fazer agora é trabalhar com o código C# para poder abrir esse arquivo diretores.txt e poder implementar essas tarefas que foram solicitadas. Então, vamos começar aqui a fazer a abertura desse arquivo.

Existem várias maneiras para você abrir e ler um arquivo utilizando C#, o que nós vamos mostrar aqui é como fazer essa abertura para ler uma quantidade determinada de bytes desse arquivo e para isso, nós vamos utilizar uma classe específica, que é a classe FileStream.

Vamos colocar aqui o nome desse tipo, dessa classe, FileStream, file de arquivo e stream que em inglês significa fluxo. Então, FileStream é uma classe que não foi encontrada aqui no nosso código, porque ela está no namespace, que não foi mencionada aqui em cima no using.

Nós temos que importar o namespace dessa classe, a gente pode fazer isso clicando nessa lampadinha aqui do lado, vamos clicar para expandir e ele vai mostrar aqui a opção using System.IO. Então, o System.IO é o namespace do DotNet para você trabalhar com IO, que inglês IO é entrada e saída, input, output, entrada e saída de dados.

Vamos então colocar aqui using System.IO, então ele reconheceu agora a classe FileStream e eu vou dar um nome para a variável que vai armazenar uma instância dessa classe. Vamos dar o nome dessa variável de Fluxo de arquivo, então Fluxo de arquivo. [06:57] E agora que eu já declarei, eu vou inicializar essa variável Fluxo de arquivo, colocando aqui, vou quebrar uma linha e vou colocar aqui a atribuição a essa variável que vai ser uma nova instância. Então, operador new FileStream.

E aqui dentro dos parentes desse construtor, eu vou colocar o nome do meu arquivo, vamos colocar aqui então: “diretores.txt”, mas note que essa construção, esse construtor, ele não está aceitando somente esse parâmetro, nós temos que informar ainda outras opções de abertura desse arquivo, que opções são essas?

O FileStream, ele exige que você informe qual é o modo de abertura, então vamos colocar um novo parâmetro aqui, depois do diretores.txt, que é o nome do arquivo, que vai ser o parâmetro do modo do arquivo, então FileMode, FileMode é o nome de uma enumeração, essa enumeração vai ter algumas opções de abertura.

Vou colocar o ponto e ele vai mostrar aqui para mim as opções de abertura, qual opção que eu vou escolher? Se eu quero abrir para leitura, então eu vou escolher aqui a opção open, então vamos escolher o open. Em seguida, eu vou colocar outro parâmetro aqui para abertura, que é o quê?

O FileAccess, então vamos escolher aqui FileAccess, mais uma vez, o FileAccess também é uma enumeração, então “FileAccess.” e aqui eu tenho as opções, então nós queremos abrir para leitura somente. Então, a leitura em inglês read, então “FileAccess.read”.

Voltando aqui, agora eu tenho já a variável declarada e inicializada, o que eu vou fazer agora é começar a ler, começar a ler os bytes desse arquivo para poder em seguida imprimir na tela.

Ler e Gravar Bytes em Fluxos de Arquivos - Lendo Bytes do Arquivo

Então para a gente começar a ler os dados desse arquivo diretores.txt, eu eu vou ter que utilizar a minha variável fluxo de arquivo e vou ter que começar a trabalhar com métodos para leitura de dados.

Então, vamos colocar aqui o nome da nossa variável fluxo de arquivo e vamos chamar o método de leitura, que em inglês read, que é ler, então vamos ler o que, exatamente? Vamos ler uma sequência de bytes. Então vamos colocar aqui o método do read, abre e fecha parênteses.

Porém, o método read, ele exige alguns parâmetros que nós não temos ainda, que parâmetros são esses? Nós vamos colocar três parâmetros, o primeiro deles aqui vai seu um array, que vai ser onde os bytes vão ser armazenados ao final dessa leitura.

Então, vamos colocar aqui array, o outro parâmetro vai ser o que é chamado de offset, que em português significa posição ou deslocamento, então essa posição, ela vai dizer a partir de qual byte, a gente vai começar a ler e o terceiro parâmetro vai ser a quantidade, o tamanho desse pedaço do arquivo que nós vamos ler.

Então, vamos colocar aqui tamanho e nós vamos ter que declarar essas três variáveis, para que elas sejam utilizadas aqui pelo método read, então vamos começar a declarar a primeira delas, que é o array, esse é o array de destino, que é o quê?

Ele é um array de bytes, então vamos declarar um array de bytes, então byte array, vamos chamar de array, vai ser o que? Uma nova instância de um array de bytes, mas lembra que para a gente declarar e inicializar um array de bytes, eu preciso colocar aqui entre os colchetes, o tamanho esse array, porque ele vai ter que começar com um certo tamanho.

Vamos ver aqui então 10 bytes, porque é isso que está sendo solicitado aqui nas tarefas, vamos ler 10 bytes, então vou inicializar o meu array com o tamanho de 10. A outra variável vai ser a posição, vamos declarar aqui então int posição, que é o também chamado de offset.

A posição vai ser a posição inicial do arquivo, eu quero ler a partir do começo, como essa posição, ela é base 0, então a primeira posição é 0, vamos deixar aqui então o valor 0 inicial e a outra variável que também é inteira é o tamanho do bloco que vai ser lido a partir do arquivo.

Vamos declarar então a variável tamanho e vamos colocar o tamanho que é 10. Agora sim, FluxoDeArquivo.Read. Agora, o que a gente vai fazer é colocar um breakpoint aqui logo depois do método read, vamos colocar um breakpoint e vamos rodar a aplicação.

Quando eu rodo aplicação, ele vai executar a leitura e agora a gente parou nessa linha e agora eu tenho a oportunidade de inspecionar a variável array que foi alimentada com os dados do arquivo. Vamos dar uma olhada aqui, o array, ele contém 10 posições, que são 10 bytes e cada posição foi preenchida aqui com um valor numérico.

Esse valor numérico, que são os bytes que foram lidos do arquivo, eles representam na sua grande maioria, o que? Os caracteres que são lidos... desse arquivo e depois eles são transformados em letras e números e outros símbolos gráficos.

Então, o que a gente vai fazer aqui é pegar esse array e imprimir no console, porque é exatamente isso que está pedindo a terceira tarefa, imprimir esses bytes no console.

O que a gente vai fazer aqui, inicialmente, é tirar esse breakpoint, vamos tirar esse breakpoint do final e agora, a gente vai varrer, a gente vai a percorrer esse array, utilizando uma instrução foreach. Então, vamos colocar aqui um foreach para cada... o que? Para cada caractere dentro da nossa coleção, que é o array, que é chamado de array mesmo.

Então, para cada caractere dentro do nosso array, a gente vai imprimir no console, com um console.WriteLine e vou colocar aqui o caractere que foi lido em cada vez no nosso console. Vamos rodar aplicação com “F5” e aí, a aplicação abriu, leu o arquivo, imprimiu no console e fechou.

Para não deixar a aplicação ficar fechando o console, eu vou colocar uma instrução aqui no final, para ele poder segurar esse console e esperar uma tecla, então vamos colocar Console.ReadKey, rodando de novo o programa.

Aí está, ele fez a leitura e ele imprimiu aqui os 10 caracteres que foram lidos do nosso arquivo, mas a gente quer mostrar isso de uma maneira mais amigável, então a gente vai transformar esses caracteres em letras.

Esses bytes vão virar letras e para isso, o que eu posso fazer é pegar a cada byte e transformar num outro tipo, que é o tipo char, nós já vimos anteriormente que o tipo char, ele é um tipo numérico, porém ele tem um tratamento especial por ser um caractere.

Então, nós vamos fazer uma conversão explícita, que também é chamada de cast. Então, antes de colocar aqui no console WriteLine o caractere, eu vou fazer a conversão aqui para char. Então, abre parentes, char e em seguida, eu tenho a conversão do caractere.

Vou rodar aplicação de novo e a gente vê o resultado, agora aqui, os caracteres que foram exibidos, as letras aqui, essas letras estão cada uma em uma linha separada.

Vamos melhorar essa apresentação, evitando a quebra de linha e no lugar do WriteLine, que exibe um caractere por linha, eu vou trocar pelo Console.Write, que é um comando que não faz a quebra da linha após a impressão. Então, vamos rodar de novo.

E agora sim, eu tenho aqui o texto que foi lido, esse Quentin, que é o nome do primeiro diretor, que foi encontrado. Porém, aqui, anteriormente, nós temos alguns caracteres estranhos, nós temos esse interrogação invertido, que é da língua espanhola, mas que não tem no... O texto que a gente tem no arquivo, não contém esse caractere, nem esse daqui e nem esse aqui.

Então esses três caracteres, na verdade, eles tem um significado especial para esse arquivo texto, que é, por exemplo, dizer o tamanho do arquivo ou algum metadado, alguma informação importante para esse arquivo texto, que não é o conteúdo do arquivo em si, porque nós estamos fazendo aqui uma leitura binária.

Estamos lendo simplesmente os bytes, exatamente como eles estão no arquivo, então a gente agora vai começar a trabalhar um pouco mais com a leitura desse arquivo para, por exemplo, continuar lendo o restante desse arquivo, fazer alguns saltos de caracteres, a partir da posição atual e assim por diante.

Sobre o curso Certificação C# Programming parte 8: Entrada e Saída de Dados

O curso Certificação C# Programming parte 8: Entrada e Saída de Dados possui 356 minutos de vídeos, em um total de 67 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1241 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1241 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1241 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1241 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?

Acesso por 1 ano

Estude 24h/dia onde e quando quiser

Novos cursos todas as semanas