Почему этот FileStream только возвращает нули? - PullRequest
1 голос
/ 22 октября 2009

У меня есть файл (test.txt), который содержит «1234567». Однако, когда я пытаюсь прочитать его на C #, используя FileStream.Read, я получаю только 0 (семь нулей в этом случае) Кто-нибудь может сказать мне, почему? Я действительно потерян здесь.

Редактировать: Проблема решена, неверный оператор сравнения. Однако теперь он возвращает "49505152535455"

Редактировать 2: Готово. Для записи мне пришлось вывести переменную byte как char .

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();
    }
}

Ответы [ 3 ]

2 голосов
/ 22 октября 2009

Эта строка

while (toRead < 0)

гарантирует, что вы никогда не читаете. toRead будет> = 0 перед циклом.

После этого вы сбрасываете массив байтов, который никогда не был заполнен.

2 голосов
/ 22 октября 2009
 foreach (byte b in bytes)
            {
                Console.Write(b.ToString());
            }

Этот код неверен. Это печать строкового значения байтового значения. т.е. 49 для ascii char '0', 50 для '1' и т. д.

Вам нужно вывести его как

Console.Write(new Char(b).toString());
1 голос
/ 22 октября 2009

while (toRead <0) должно быть while (toRead> 0) (больше)

...