Обработка исключений
От: tdebug Беларусь  
Дата: 12.07.05 06:54
Оценка:
Подскажите пожалуйста, как тут с перехватом исключений разобраться. Как видно из примера, надо обрабатывать исключение IO и сериализации. Проблема в том что я не знаю где разместить myStream.Close(), так как когда возникает ошибка при десериализации, закрытие потока произойти не успевает, а если разместить myStream.Close() где-то в блоках catch или finaly или за ними то компилятор ругается на то что не знает что такое myStream. Одним словом, после ошибки десериализации, файл остаётся занят потоком


try
                {
                    Stream myStream = new FileStream(openFileDialog1.FileName, FileMode.Open);
                    BinaryFormatter myBinary = new BinaryFormatter();
                    mControls.SetContainer((Container)myBinary.Deserialize(myStream));
                    myStream.Close();
                    
                }
                catch(System.Runtime.Serialization.SerializationException)
                {
                    .......
                    return;
                }
                catch(System.IO.IOException)
                {
                    .......
                    return;
                }
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Обработка исключений
От: Hup Россия  
Дата: 12.07.05 07:00
Оценка:
Здравствуйте, tdebug, Вы писали:

А так пойдет?
T>
                    Stream myStream;
T>                try
T>                {
T>                    myStream = new FileStream(openFileDialog1.FileName, FileMode.Open);
T>                    BinaryFormatter myBinary = new BinaryFormatter();
T>                    mControls.SetContainer((Container)myBinary.Deserialize(myStream));                    
T>                }
T>                catch(System.Runtime.Serialization.SerializationException)
T>                {
T>                    .......
T>                    return;
T>                }
T>                catch(System.IO.IOException)
T>                {
T>                    .......
T>                    return;
T>                }    
                    finally
                    {
                        myStream.Close();
                    }

T>
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Обработка исключений
От: Аноним  
Дата: 12.07.05 07:05
Оценка:
Здравствуйте, Hup, Вы писали:

Hup>Здравствуйте, tdebug, Вы писали:


Hup>А так пойдет?

T>>
Hup>                    Stream myStream;
T>>                try
T>>                {
T>>                    myStream = new FileStream(openFileDialog1.FileName, FileMode.Open);
T>>                    BinaryFormatter myBinary = new BinaryFormatter();
T>>                    mControls.SetContainer((Container)myBinary.Deserialize(myStream));                    
T>>                }
T>>                catch(System.Runtime.Serialization.SerializationException)
T>>                {
T>>                    .......
T>>                    return;
T>>                }
T>>                catch(System.IO.IOException)
T>>                {
T>>                    .......
T>>                    return;
T>>                }    
Hup>                    finally
Hup>                    {
                                            if(myStream != null)
Hup>                        myStream.Close();
Hup>                    }

T>>
Re: Обработка исключений
От: SiAVoL Россия  
Дата: 12.07.05 07:06
Оценка:
Здравствуйте, tdebug, Вы писали:

T>Проблема в том что я не знаю где разместить myStream.Close()

используй using
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re: Обработка исключений
От: _FRED_ Черногория
Дата: 12.07.05 07:14
Оценка:
Здравствуйте, tdebug, Вы писали:

T>Подскажите пожалуйста, как тут с перехватом исключений разобраться. Как видно из примера, надо обрабатывать исключение IO и сериализации. Проблема в том что я не знаю где разместить myStream.Close(), так как когда возникает ошибка при десериализации, закрытие потока произойти не успевает, а если разместить myStream.Close() где-то в блоках catch или finaly или за ними то компилятор ругается на то что не знает что такое myStream. Одним словом, после ошибки десериализации, файл остаётся занят потоком


      try {
        using(Stream myStream = new FileStream(openFileDialog1.FileName, FileMode.Open)) {
          BinaryFormatter myBinary = new BinaryFormatter();
          mControls.SetContainer((Container)myBinary.Deserialize(myStream));
        }//using
      } catch(SerializationException) {
        return;
      } catch(IOException) {
        return;
      }//try
<< RSDN@Home 1.1.4 beta 7 rev. 500 >> =11:15= [Windows XP — 5.1.2600.0]
under «*none*»
Help will always be given at Hogwarts to those who ask for it.
Re: Обработка исключений
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 12.07.05 13:57
Оценка:
Здравствуйте, tdebug, Вы писали:

Привьнее всего будет вот так:
try
{
Stream myStream = new FileStream(openFileDialog1.FileName, FileMode.Open);
try
{
BinaryFormatter myBinary = new BinaryFormatter();
mControls.SetContainer((Container)myBinary.Deserialize(myStream));
}
finally
{
myStream.Close();
}
}
catch(System.Runtime.Serialization.SerializationException)
{
.......
return;
}
catch(System.IO.IOException)
{
.......
return;
}

или (так намного элегантнее):
try
{
using (Stream myStream = new FileStream(openFileDialog1.FileName, FileMode.Open))
{
BinaryFormatter myBinary = new BinaryFormatter();
mControls.SetContainer((Container)myBinary.Deserialize(myStream));
}
}
catch(System.Runtime.Serialization.SerializationException)
{
.......
return;
}
catch(System.IO.IOException)
{
.......
return;
}
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.