Pergunta

Eu tenho um arquivo (test.txt), que contém "1234567". No entanto, quando eu tento lê-lo em C # usando FileStream.Read, recebo apenas 0s (sete zeros, neste caso). Alguém poderia me dizer por quê? Estou realmente perdido aqui.

Editar: Problema resolvido, errado operador de comparação. No entanto, agora ele está retornando "49505152535455"

Editar 2: Concluído. Para o registro, eu tinha para a saída do byte variável como um caractere .

using System;
using System.IO;

class Program
{
    static void Main()
    {

        FileStream fil = null;

        try
        {
            fil = new FileStream("test.txt", FileMode.Open,FileAccess.Read);

            byte[] bytes = new byte[fil.Length];
            int toRead = (int)fil.Length;
            int Read = 0;

            while (toRead < 0)
            {
                int n = fil.Read(bytes, Read, toRead);

                Read += n;
                toRead -= n;
            }

            //Tried this, will only return 0000000
            foreach (byte b in bytes)
            {
                Console.Write(b.ToString());
            }


        }
        catch (Exception exc)
        {
            Console.WriteLine("Oops! {0}", exc.Message);
        }
        finally
        {
            fil.Close();
        }


        Console.ReadLine();
    }
}
Foi útil?

Solução

Esta linha

while (toRead < 0)

garante que você nunca realmente ler. Toread vai ser> = 0 antes do loop.

Depois você despejar o array de bytes que nunca foi preenchido.

Outras dicas

 foreach (byte b in bytes)
            {
                Console.Write(b.ToString());
            }

Este código é incorreta. Ele está a imprimir o valor da cadeia de valor do byte. ou seja, 49 para o caractere ASCII '0', 50 para '1', etc.

Você precisa de saída lo como

Console.Write(new Char(b).toString());

while (Toread <0) deve ser while (Toread> 0) (maior que)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top