public static XDocument OpenFile(string file, out Exception exception) { XDocument doc = null; string extension = ""; exception = null; try { extension = System.IO.Path.GetExtension(file); } catch { //no file extension specified: try using the default one file += ".sub"; } if (string.IsNullOrWhiteSpace(extension)) { extension = ".sub"; file += ".sub"; } if (extension == ".sub") { System.IO.Stream stream = null; try { stream = SaveUtil.DecompressFiletoStream(file); } catch (System.IO.FileNotFoundException e) { exception = e; DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (File not found) " + Environment.StackTrace.CleanupStackTrace(), e); return(null); } catch (Exception e) { exception = e; DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed!", e); return(null); } try { stream.Position = 0; doc = XDocument.Load(stream); //ToolBox.TryLoadXml(file); stream.Close(); stream.Dispose(); } catch (Exception e) { exception = e; DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (" + e.Message + ")"); return(null); } } else if (extension == ".xml") { try { ToolBox.IsProperFilenameCase(file); doc = XDocument.Load(file, LoadOptions.SetBaseUri); } catch (Exception e) { exception = e; DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (" + e.Message + ")"); return(null); } } else { DebugConsole.ThrowError("Couldn't load submarine \"" + file + "! (Unrecognized file extension)"); return(null); } return(doc); }