1
resposta

Aula 02.FileStream e Leitor StreamRead - Tópico 04. Organizando nosso tópico

Eu fiz o que a aula ensina:

a) transferi todo o código do arquivo 'Program.cs' para o arquivo 'LidandoComFileStreamDiretamente.cs'.

b) renomeei o método 'Main' neste arquivo para 'LidandoComFileStreamDiretamente()'.

c) Renomeei a classe 'Program' para 'public partial Program' neste arquivo também, ficando assim:

//arquivo "LidandoComFileStreamDiretamente.cs"

using System.Buffers.Text;
using System.Text;

namespace Teste
{
partial class Program
    {
        static void LidandoComFileStreamDiretamente()
        {
            var enderecoArquivo = "filesabertos.txt";
            using (var fluxoDoArquivo = new FileStream(enderecoArquivo, FileMode.Open))
            {
                var arrayBuffer = new byte[1024];//tamanho  em bytes do bloco a preencher o array
                int indiceInicial = 0;
                int qtdIndices = arrayBuffer.Length;
                int quantidadeBytesLidos = -1;
                while (quantidadeBytesLidos != 0)
                {
                    quantidadeBytesLidos = fluxoDoArquivo.Read(arrayBuffer, indiceInicial, qtdIndices);
                    ExibirBuffer(arrayBuffer, quantidadeBytesLidos);
                    Console.WriteLine($"Quantidade de bytes lidos no loop {quantidadeBytesLidos}");
                }//while
                fluxoDoArquivo.Close();
            }//using var
        }//Lidando...
        static void ExibirBuffer(byte[] buffer, int bytesLidos)
        {
            var utf8 = new UTF8Encoding();
            var texto = utf8.GetString(buffer, 0, bytesLidos);
            Console.Write(texto);
        }//ExibirBuffer
    }//classe
}//namespace

d) Retirei o conteúdo do 'Main' no arquivo 'Program.cs', deixando apenas 'Console.ReadLine();'.

e) Renomeei a classe 'Program' para 'public partial Program' no arquivo 'Program.cs'.

Ficou assim o arquivo 'Program.cs':

//arquivo "Program.cs"

using System.Buffers.Text;
using System.Text;

namespace Teste
{
partial class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }//Main
    }//classe
}//namespace

Tudo, conforme explicado na aula.

Entretanto, ao executar o projeto, nada aconteceu. O arquivo texto não foi lido.

Experimentei pôr a chamada do método 'LidandoComFileStreamDiretamente();' dentro do 'Main' (arquivo Program.cs), conforme abaixo, e aí funcionou, conforme abaixo:

//arquivo "Program.cs"

using System.Buffers.Text;
using System.Text;

namespace Teste
{
partial class Program
    {
        static void Main(string[] args)
        {
            LidandoComFileStreamDiretamente();//incluído para poder funcionar
            Console.ReadLine();
        }//Main
    }//classe
}//namespace

Faltou alguma coisa no vídeo? Não era para pôr a chamada do método dentro do Main? Em caso positivo, se o método 'LidandoComFileStreamDiretamente()' posto dentro do 'Main' não era para ser inserido ali, onde errei?

1 resposta

Olá, Mauro

Obrigada por compartilhar sua dúvida. É normal encontrar dificuldades ao organizar nosso código em diferentes arquivos, mas com algumas alterações, conseguimos resolver esse problema.

No vídeo, foi explicado que o método Main deveria ficar no arquivo Program.cs, enquanto o método LidandoComFileStreamDiretamente deveria ser colocado no arquivo LidandoComFileStreamDiretamente.cs. No entanto, você percebeu que ao executar o projeto, nada aconteceu, o arquivo texto não foi lido.

Você fez uma alteração correta ao incluir a chamada do método LidandoComFileStreamDiretamente() dentro do Main no arquivo Program.cs. Essa alteração foi necessária porque, ao utilizar a palavra-chave partial, estamos dividindo a classe Program em vários arquivos, mas queremos tratá-la como um único elemento. Portanto, precisamos informar ao compilador que essas classes são permitidas e devem ser trabalhadas juntas.

Dessa forma, ao incluir a chamada do método LidandoComFileStreamDiretamente() dentro do Main, o programa entenderá que a classe Program está em vários arquivos e poderá ser trabalhada de forma única.

Portanto, você não errou ao incluir a chamada do método dentro do Main. Essa foi uma solução necessária para que o programa funcione corretamente.

Espero ter esclarecido sua dúvida! Se tiver mais alguma pergunta, é só me dizer.

Espero ter ajudado e bons estudos!