adressmoeistranici
@adressmoeistranici
Делатель

Почему функция нестабильно читает файл?

Функция иногда не прочитывает файл
Как это исправить?
static public void ReadParam()
        {
            BinaryReader br;
            string path = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName + "\\noticeprogramdata.dat";
            try
            {
                string locale = string.Empty;
                int enume = -1;
                List<ScheduleCell> cells = new List<ScheduleCell>();
                br = new BinaryReader(new FileStream(path, FileMode.OpenOrCreate));
                try
                {
                    newStart = br.ReadBoolean();
                    wD1 = br.ReadBoolean();
                    wD2 = br.ReadBoolean();
                    wD3 = br.ReadBoolean();
                    wD4 = br.ReadBoolean();
                    eD1 = br.ReadBoolean();
                    eD2 = br.ReadBoolean();
                    eD3 = br.ReadBoolean();
                    eD4 = br.ReadBoolean();
                    dayToday = br.ReadByte();
                    DateTimeOffset.TryParse(br.ReadString(), CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeOld);

                    locale = br.ReadString();
                    enume = br.ReadInt32();
                    for (;;)
                    {
                        cells.Add(new ScheduleCell(br.ReadString(), br.ReadInt32()));
                    }
                }
                catch (EndOfStreamException exc)
                {
                    Console.WriteLine(exc.Message.ToString());
                }
                br.Close();
                schedule = new ScheduleCollection(cells, (ScheduleCollection.SortDirectionEnum)enume, locale);
            }
            catch (Exception exc)
            {
                Console.WriteLine(">>>"+exc.Message.ToString());
                if (br != null)
                    br.Close();
            }
        }

использую этот код в проекте windows forms
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 2
@kttotto
пофиг на чем писать
Запустите студию с правами администратора и проверьте, будет ли та же проблема. Если нет, значит дело в правах. Если будет, смотрите на размер файла, буфер, блокировку файла другими процессами, возможно делается одновременная попытка чтения из других потоков.
Ответ написан
@tupovat_bydlovat
Понекропостчу.
Вместо ловли еоф-эксепшона и цикла фор(;;) можно сравнить position и length стрима в качестве условия while.
А по вопросу - вы там ловите один единственный конкретный эксепшон (ну или стопку конкретных эксепшонов) и только в нём закрываете ридер, при этом вызывая кучу всяких readInt32 и создавая попутно кучу других объектов реализация которых может так же хромать и возможно кидать эксепшоны.
По хорошему обернуть надо в 2 юзинга, как советовали выше. Если очень хочется ловить эксепшоны - ридер закрывать надо в finally, как тоже советовали выше, а чтобы все таки с проблемой разобраться начните с ловли и логирования остальных эксепшонов, а не только проблем с правами и кривыми путями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы