diff api/Factories/AbstractNativeWarFoundryFactory.cs @ 148:8e636443aa8e

Re #176: Bug when saving recently edited army * Try to make sure that we clear up our open streams
author IBBoard <dev@ibboard.co.uk>
date Sat, 26 Sep 2009 10:14:04 +0000
parents d0c60b3204c1
children b36cc4af435b
line wrap: on
line diff
--- a/api/Factories/AbstractNativeWarFoundryFactory.cs	Fri Sep 25 19:17:54 2009 +0000
+++ b/api/Factories/AbstractNativeWarFoundryFactory.cs	Sat Sep 26 10:14:04 2009 +0000
@@ -108,21 +108,40 @@
 		
 		protected Army CreateArmyFromFile(ZipFile file)
 		{
-			return CreateArmyFromStream(file, GetArmyDataStream(file));
+			Stream dataStream = GetArmyDataStream(file);
+
+			try
+			{
+				return CreateArmyFromStream(file, dataStream);
+			}
+			catch (InvalidFileException ex)
+			{
+				throw new InvalidFileException("Data file " + file.Name + " was not a valid army file", ex);
+			}
+			finally
+			{
+				dataStream.Close();
+			}
 		}
 		
 		protected abstract Stream GetArmyDataStream(ZipFile file);
 		protected abstract Army CreateArmyFromStream(ZipFile file, Stream dataStream);
 		
 		protected Race CreateRaceFromFile(ZipFile file)
-		{
+		{
+			Stream dataStream = GetRaceDataStream(file);
+
 			try
 			{
-				return CreateRaceFromStream(file, GetRaceDataStream(file));
+				return CreateRaceFromStream(file, dataStream);
 			}
 			catch (InvalidFileException ex)
 			{
-				throw new InvalidFileException("Data file "+file.Name+" was not a valid race file", ex);
+				throw new InvalidFileException("Data file "+file.Name+" was not a valid race file", ex);
+			}
+			finally
+			{
+				dataStream.Close();
 			}
 		}
 		
@@ -130,8 +149,21 @@
 		protected abstract Race CreateRaceFromStream(ZipFile file, Stream dataStream);
 		
 		protected GameSystem CreateGameSystemFromFile(ZipFile file)
-		{
-			return CreateGameSystemFromStream(file, GetGameSystemDataStream(file));
+		{
+			Stream dataStream = GetGameSystemDataStream(file);
+
+			try
+			{
+				return CreateGameSystemFromStream(file, dataStream);
+			}
+			catch (InvalidFileException ex)
+			{
+				throw new InvalidFileException("Data file " + file.Name + " was not a valid game system file", ex);
+			}
+			finally
+			{
+				dataStream.Close();
+			}
 		}
 		
 		protected abstract Stream GetGameSystemDataStream(ZipFile file);