Abro una transmisión y luego deserializo los datos en la transmisión. Sin embargo, agregué un miembro al objeto SavedEventSet por lo que ahora cuando intento abrir un archivo antiguo, arroja la excepción en la línea de deserialización.Cerrar una secuencia después de una excepción
Esto está bien conmigo (por ahora) pero el problema es que manejo la excepción, pero nunca cierro la secuencia (porque la excepción ocurrió antes de cerrar la transmisión), así que cuando intento abrir el archivo nuevamente, no me deja porque está en uso.
¿Cómo cierro la transmisión después de esta excepción? Si pongo stream.Close() en el catch o en el finally, se queja de intentar acceder a una variable local no asignada. Parece una mala práctica simplemente abrir un archivo aleatorio que sé que está allí. ¿Hay alguna forma de abrir una secuencia de forma similar a un constructor vacío para que parezca que está asignada?
Gracias
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 para 'using()'. Detrás de escena se compila en un bloque try/catch, y garantiza que se llame 'Dispose()' - se puede usar en todos los implementadores de 'IDisposable' – STW
Estoy de acuerdo, esto es exactamente lo que el bloque 'using' es para . – auujay
Gracias :) Ni siquiera sabía sobre el uso de bloques. – EatATaco