none
Не могу установить указатель в начало файла RRS feed

  • Вопрос

  • Вот если вот так

    while (str_in.Peek() != -1)
                {
                    Console.WriteLine(str_in.ReadLine());
                }
                fout.Seek(0, SeekOrigin.Begin);
    
                do                          // здесь посимвольно читаем и выводим на экран строки из файла
                {
                    num_out = (char) str_in.Read();
                    switch (num_out)
                    {
                        case ',':
                        case '|':
                            Console.Write(" ");
                            num_out = '\0';
                            break;
                        case '}':
                        case '{':
                            Console.Write(num_out);
                            num_out = '\0';
                            break;
                        case '#':
                            break;
                        default: 
                            Console.Write(num_out);
                            break;
                    }
                } while (num_out != '#');
    

    , то и str_in.ReadLine() корректно отрабатывает, затем выставляется положение указателя в начало файла и str_in.Read() правильно считывает символы

    А вот если блок с str_in.ReadLine() перенести после цикла do{} while,

     do                          // здесь посимвольно читаем и выводим на экран строки из файла
                {
                    num_out = (char) str_in.Read();
                    switch (num_out)
                    {
                        case ',':
                        case '|':
                            Console.Write(" ");
                            num_out = '\0';
                            break;
                        case '}':
                        case '{':
                            Console.Write(num_out);
                            num_out = '\0';
                            break;
                        case '#':
                            break;
                        default: 
                            Console.Write(num_out);
                            break;
                    }
                } while (num_out != '#');
    
                fout.Seek(0, SeekOrigin.Begin);
    
                while (str_in.Peek() != -1)
                {
                    Console.WriteLine(str_in.ReadLine());
                }
                
                str_in.Close();

    то условие str_in.Peek != -1 не выполняется. Подскажите, пожалуйста, где я ошиблась? Спасибо

    4 декабря 2013 г. 17:52

Ответы

  • выяснилось, что необходимо использовать метод DiscardBufferedData если нужно прочитать один и тот же поток несколько раз..в msdn, к сожалению, это не на видном месте лежит
    • Помечено в качестве ответа Sasha Semenova 4 декабря 2013 г. 18:59
    4 декабря 2013 г. 18:59

Все ответы

  • UPD: выяснилось, что и в первом случае str_in.Peek равен -1...тогда не понятно, как установить указатель в начало..подскажите, пожалуйста
    4 декабря 2013 г. 18:47
  • выяснилось, что необходимо использовать метод DiscardBufferedData если нужно прочитать один и тот же поток несколько раз..в msdn, к сожалению, это не на видном месте лежит
    • Помечено в качестве ответа Sasha Semenova 4 декабря 2013 г. 18:59
    4 декабря 2013 г. 18:59