none
Делетанский вопрос по c# RRS feed

  • Вопрос

  • using System;
    using System.IO;
    class ShowFile {
    static void Main(string[] args) {
    int i;
    FileStream fin = null;
    fin = new FileStream(args[0], FileMode.Open);
    do
    {
    i = fin.ReadByte();
    Console.Write((Char)i);
        }
    while (i != -1);
    }
    }

    Объясните мне, пожалуйста, цикл Do будет до момента пока i не станет равным -1, откуда здесь берется это значение?

    1 октября 2014 г. 19:08

Ответы

  • Если нужно определить конец читаемого файла, то я делаю так -

    string S="";
    StreamReader r = new StreamReader (FileName);
    while ( S != null) S = r.ReadLine ();

    А конкретно на Ваш вопрос ответ такой -
    -1 - это код отсутствия прочитанной информации,
    т.е. "Конец файла".

    Но выход по этому коду не удобен,
    поскольку "-1" может быть полезной информацией в файле,
    а не концом файла.


    • Изменено QazRdx 1 октября 2014 г. 20:44
    • Помечено в качестве ответа Дмитрий Трясов 2 октября 2014 г. 4:42
    1 октября 2014 г. 20:10
  • -1 не может содержаться в файле, это специальное значение, которое возвращается, когда достигнут конец файла. ReadByte не просто так возвращает более широкий тип int (System.Int32) вместо byte (System.Byte).
    2 октября 2014 г. 0:26
  • Код не совсем верен. В зависимости от опций компиляции вы получите либо исключение, либо выведете лишний символ на экран. Проверять на -1 надо до вывода, а не после.

    while((i=fin.ReadByte())!=-1) {
        Console.Write((char)i);
    }
    P.S.
    -1 в файле не содержится, это просто служебное значение сигнализирующее, что байт не был прочитан, так как был достигнут конец файла.
    • Изменено PetSerAl 2 октября 2014 г. 0:41
    • Предложено в качестве ответа ThankfulHeart 2 октября 2014 г. 3:33
    • Помечено в качестве ответа Дмитрий Трясов 2 октября 2014 г. 4:42
    2 октября 2014 г. 0:38
  • @Дмитрий Трясов

    Байт без знака, приведенный к Int32, или значение -1, если достигнут конец потока. 

    http://msdn.microsoft.com/ru-rs/library/system.io.stream.readbyte(v=vs.110).aspx


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2 октября 2014 г. 3:28

Все ответы