public bool CheckErrors(out List <string> errorMessages) { this.errorMessages = errorMessages = new List <string>(); foreach (ContentFile file in Files) { switch (file.Type) { case ContentType.ServerExecutable: case ContentType.None: case ContentType.Outpost: case ContentType.OutpostModule: case ContentType.Submarine: case ContentType.Wreck: case ContentType.BeaconStation: case ContentType.EnemySubmarine: break; default: try { using FileStream stream = File.Open(file.Path, System.IO.FileMode.Open, System.IO.FileAccess.Read); using var reader = XMLExtensions.CreateReader(stream); XDocument.Load(reader); } catch (Exception e) { if (TextManager.Initialized) { errorMessages.Add(TextManager.GetWithVariables("xmlfileinvalid", new string[] { "[filepath]", "[errormessage]" }, new string[] { file.Path, e.Message })); } else { errorMessages.Add($"XML File Invalid. PATH: {file.Path}, ERROR: {e.Message}"); #if DEBUG throw; #endif } } break; } } if (IsCorePackage && !ContainsRequiredCorePackageFiles(out List <ContentType> missingContentTypes)) { errorMessages.Add(TextManager.GetWithVariables("ContentPackageCantMakeCorePackage", new string[2] { "[packagename]", "[missingfiletypes]" }, new string[2] { Name, string.Join(", ", missingContentTypes) }, new bool[2] { false, true })); } VerifyFiles(out List <string> missingFileMessages); errorMessages.AddRange(missingFileMessages); hasErrors = errorMessages.Count > 0; return(!hasErrors.Value); }
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; 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; using (var reader = XMLExtensions.CreateReader(stream)) { doc = XDocument.Load(reader); } 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); using var stream = File.Open(file, System.IO.FileMode.Open, System.IO.FileAccess.Read); using var reader = XMLExtensions.CreateReader(stream); doc = XDocument.Load(reader); } 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); }