LINUX.ORG.RU

установка на начало потока не работает

 ,


0

2

Посоны, чё за дела? Если вот так

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.Close();
то в цикле 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, что свидетельствует о том, что почему то в начало файла не ставится, не? Что происходит?

Ответ на: комментарий от ziemin

чито fout и str_in ?

try // пробуем создать FileStream
            {
                fout = new FileStream(@"D:\array.txt",FileMode.Create);
            }
            catch (IOException)
            {
                Console.WriteLine("Failed while creating or openeing file");
                return;
            }

StreamReader str_in = new StreamReader(fout);
BambarbiyaKirgudu
() автор топика

В первом примере код невалиден, в цикле while ты считываешь все содержимое StreamReader, потом цикл do/while зацикливается, т.к. str_in.Read всегда возвращает -1.

encyrtid ★★★★★
()
Ответ на: комментарий от encyrtid

странно..сейчас проверил и выяснил, что да, действительно, и в первом примере после

fout.Seek(0, SeekOrigin.Begin);
выражение
int f = str_in.Peek();
также равно -1..однако str_in.Read() читает исправно с начала файла...код работает и вотчер подтверждает, что читается с начала файла

BambarbiyaKirgudu
() автор топика
Ответ на: комментарий от encyrtid

уже понял, что после

fout.Seek(0, SeekOrigin.Begin);
следует в обязательном порядке выполнять
str_in.DiscardBufferedData();
если требуется прочитать поток несколько раз

ох уж этот msdn

BambarbiyaKirgudu
() автор топика
Последнее исправление: BambarbiyaKirgudu (всего исправлений: 1)

// Ох, щит. Ты сишник или плюсовик что ли?

using System.IO;

string[] lines = File.ReadAllLines(@"D:\array.txt");
foreach (var line in lines)
{
   //Божественный код, который нужно выполнить для каждой строки подставить тут
   foreach (var @char in line)
   {
        //Божественный код, который нужно выполнить для каждого символа подставить тут
   }
}

Писал по памяти

Dantix ★★
()
Последнее исправление: Dantix (всего исправлений: 1)
Ответ на: комментарий от oneliner

Зависит от нищебродности твоего компьютера, у меня 30 потянет.

Dantix ★★
()
Ответ на: комментарий от oneliner

10 гигабайт логов потянет?

А ты все 10Гб в одном файле хранишь?

encyrtid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.