1
resposta

Primeiro caractere cortado a cada linha

static void UsarStreamDeEntrada()
        {
            using (var fluxoDeEntrada = Console.OpenStandardInput())
            using (var fs = new FileStream("testandoConsole.txt", FileMode.Create))
            {
                var buffer = new byte[1024];

                while (Console.ReadKey().Key != ConsoleKey.Escape)
                {
                    var bytesLidos = fluxoDeEntrada.Read(buffer, 0, 1024);
                    fs.Write(buffer, 0, bytesLidos);
                    fs.Flush();
                    Console.WriteLine($"Bytes lidos: {bytesLidos}");
                }
            }
        }

Coloquei a condição para o laço do while continuar enquanto o esc não for pressionado.

A questão é que com esse ajuste, o primeiro caractere de cada linha é sempre cortado. Ao escrever teste, o arquivo salvo no testandoConsole.txt aparece como este. E isso ocorre em todas as linhas escritas.

Algum motivo pra isso acontecer? E como resolver isso?

1 resposta

Alan,

Testei sua função e realmente comeu a primeira letra de "Aplicação" no meu "Main()":

static void Main()
{
    UsarStreamDeEntrada();

    Console.WriteLine("Aplicação finalizada...");
    Console.ReadLine();
}

Modifiquei para retirar o teste de condição da linha do "While" usando uma variável booleana, desta forma e funcionou (parece uma coisa besta, mas já solucionei muitos problemas assim):

static void UsarStreamDeEntrada()
{
    using (var fluxoDeEntrada = Console.OpenStandardInput())
    using (var fs = new FileStream("testandoConsole.txt", FileMode.Create))
    {
        var buffer = new byte[1024];
        bool teste = false;

        do
        {
            var bytesLidos = fluxoDeEntrada.Read(buffer, 0, 1024);
            fs.Write(buffer, 0, bytesLidos);
            fs.Flush();
            Console.WriteLine($"Bytes lidos: {bytesLidos}");

            if (Console.ReadKey().Key == ConsoleKey.Escape) teste = true;

        } while (teste);
    }
}

Agora o fato de eu fazer a verificação somente no final do código obrigando o código rodar pelo menos uma vez com o "Do While" eu acredito que NÃO influenciou em nada...

[]'s,

Fabio I.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software