Por que isso FileStream retornar somente zeros?
-
05-07-2019 - |
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();
}
}
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)