Exemplo n.º 1
0
        //Первый проход, из основоного файла распределяем тольео те объекты, которые подходят по условию
        void FirstMerge(string FileName, float max)
        {
            //Массив потоков для записи
            StreamWriter[] writers = new StreamWriter[CountOfFiles];
            for (int i = 0; i < writers.Length; ++i)
            {
                writers[i] = new StreamWriter((i + 1).ToString(), false);
            }
            //индекс потока записи в который записываем
            int pos = 0;
            //Буфер
            Sweets buf = new Sweets();

            //Чтение файла
            using (StreamReader reader = new StreamReader(FileName))
            {
                //Пока считывание корректно, проверяем условие и, если совпало,
                //записываем в вспомогательный файл и переходим к след. файловому потоку
                while (Sweets.TryRead(buf, reader))
                {
                    if (buf.Cost < max)
                    {
                        buf.WriteStream(writers[pos]);
                        pos = (pos + 1) % CountOfFiles;
                    }
                }
            }
            //Закрываем потоки для записи
            for (int i = 0; i < writers.Length; ++i)
            {
                writers[i].Close();
            }
        }
Exemplo n.º 2
0
        //Попытка получить следующий объект из потока,
        //если считана вся серия или дошли до конца файла - возвращаем null, иначе - считываем,
        //увеличиваем кол-во считанных блоков и возвращаем объект
        public Sweets GetNext()
        {
            Sweets res = null;

            if (!IsEndOfFile && !IsMaxRecordsRead)
            {
                res = new Sweets();
                if (Sweets.TryRead(res, reader))
                {
                    ReadBlocks++;
                }
                else
                {
                    res = null;
                }
            }
            return(res);
        }