Otwieram strumień, a następnie deserializuję dane w strumieniu. Jednak dodałem element do obiektu SavedEventSet, więc teraz, gdy próbuję otworzyć stary plik, zgłasza wyjątek w wierszu deserializacji.Zamykanie strumienia po wystąpieniu wyjątku
Jest to w porządku ze mną (na razie), ale problem polega na tym, że obsługuję wyjątek, ale nigdy nie zamykam strumienia (ponieważ wyjątek wystąpił przed zamknięciem strumienia), więc gdy spróbuję ponownie otworzyć plik, nie pozwala mi, ponieważ jest w użyciu.
Jak zamknąć strumień po tym wyjątku? Jeśli umieściłem strumień.Close() w haczyku lub w końcu, to uskarża się na próbę uzyskania dostępu do nieprzypisanej zmiennej lokalnej. Wygląda na to, że po prostu otwieram losowy plik, o którym wiem, że jest. Czy istnieje sposób na otwarcie strumienia w sposób podobny do pustego konstruktora, aby wyglądał tak, jakby był przypisany?
Dzięki
SavedEventSet sES;
OpenFileDialog oFD = new OpenFileDialog();
Stream stream;
BinaryFormatter bF;
try
{
oFD.InitialDirectory = this.path;
oFD.Title = "Open Event Saved File.";
oFD.ShowDialog();
if(oFD.FileName.Contains(".sav"))
{
stream = File.Open(oFD.FileName, FileMode.Open);
bF = new BinaryFormatter();
sES = (SavedEventSet)bF.Deserialize(stream);
stream.Close();
}
}
catch (Exception ex)
{
stream.Close();
/*handle Exception*/
}
+1 dla 'using()'. Za kulisami kompiluje się do bloku try/catch, i gwarantuje wywołanie funkcji "Dispose()" - może być używane na wszystkich implementatorach 'IDisposable' – STW
Zgadzam się, to jest dokładnie to, co jest blokiem 'using' . – auujay
Dzięki :) Nie wiedziałem nawet o użyciu bloku. – EatATaco