/** * ParseReportFile - extracts a ReportFileData from a crash dump file * * @param filename - the crash dump * @param reportData - the container to fill * * @return bool - true if successful */ public bool ParseReportFile(string filename, ReportFileData reportData, OutputLogFile logFile) { logFile.WriteLine(""); logFile.WriteLine("Parsing report dump " + filename); logFile.WriteLine("\n\n"); MemoryStream ms = new MemoryStream(); try { using (BinaryReader binaryReader = new BinaryReader((Stream) File.OpenRead(filename))) { while (true) { byte[] buffer = binaryReader.ReadBytes(4096); if (buffer != null && buffer.Length != 0) ms.Write(buffer, 0, buffer.Length); else break; } } } catch (Exception ex) { logFile.WriteLine(ex.Message); logFile.WriteLine("Failed to read report dump!"); return false; } ms.Seek(0L, SeekOrigin.Begin); string nextString = this.GetNextString(ms, logFile); logFile.WriteLine("Version = " + nextString); if (nextString.Equals(ReportFile.currentDumpVersion)) { logFile.WriteLine("Dump is current version: " + ReportFile.currentDumpVersion); reportData.Version = int.Parse(nextString); reportData.ComputerName = this.GetNextString(ms, logFile); reportData.UserName = this.GetNextString(ms, logFile); reportData.GameName = this.GetNextString(ms, logFile); reportData.PlatformName = this.GetNextString(ms, logFile); reportData.LanguageExt = this.GetNextString(ms, logFile); reportData.TimeOfCrash = this.GetNextString(ms, logFile); reportData.BuildVer = this.GetNextString(ms, logFile); reportData.ChangelistVer = this.GetNextString(ms, logFile); reportData.CommandLine = this.GetNextString(ms, logFile); reportData.BaseDir = this.GetNextString(ms, logFile); reportData.CallStack = this.GetNextString(ms, logFile); reportData.EngineMode = this.GetNextString(ms, logFile); } else if (nextString.Equals("2")) { logFile.WriteLine("Dump is old but supported. DumpVer=" + nextString + " CurVer=" + ReportFile.currentDumpVersion); reportData.Version = int.Parse(nextString); reportData.ComputerName = this.GetNextString(ms, logFile); reportData.UserName = this.GetNextString(ms, logFile); reportData.GameName = this.GetNextString(ms, logFile); reportData.LanguageExt = this.GetNextString(ms, logFile); reportData.TimeOfCrash = this.GetNextString(ms, logFile); reportData.BuildVer = this.GetNextString(ms, logFile); reportData.ChangelistVer = this.GetNextString(ms, logFile); reportData.CommandLine = this.GetNextString(ms, logFile); reportData.BaseDir = this.GetNextString(ms, logFile); reportData.CallStack = this.GetNextString(ms, logFile); reportData.EngineMode = this.GetNextString(ms, logFile); } else { logFile.WriteLine("Outdated dump version " + nextString + "! Current Version is " + ReportFile.currentDumpVersion); return false; } logFile.WriteLine("\n\n"); return reportData.IsValid(logFile); }
/** * ParseReportFile - extracts a ReportFileData from a crash dump file * * @param filename - the crash dump * @param reportData - the container to fill * * @return bool - true if successful */ public bool ParseReportFile(string filename, ReportFileData reportData, OutputLogFile logFile) { logFile.WriteLine(""); logFile.WriteLine("Parsing report dump " + filename); logFile.WriteLine("\n\n"); MemoryStream ms = new MemoryStream(); try { using (BinaryReader binaryReader = new BinaryReader((Stream)File.OpenRead(filename))) { while (true) { byte[] buffer = binaryReader.ReadBytes(4096); if (buffer != null && buffer.Length != 0) { ms.Write(buffer, 0, buffer.Length); } else { break; } } } } catch (Exception ex) { logFile.WriteLine(ex.Message); logFile.WriteLine("Failed to read report dump!"); return(false); } ms.Seek(0L, SeekOrigin.Begin); string nextString = this.GetNextString(ms, logFile); logFile.WriteLine("Version = " + nextString); if (nextString.Equals(ReportFile.currentDumpVersion)) { logFile.WriteLine("Dump is current version: " + ReportFile.currentDumpVersion); reportData.Version = int.Parse(nextString); reportData.ComputerName = this.GetNextString(ms, logFile); reportData.UserName = this.GetNextString(ms, logFile); reportData.GameName = this.GetNextString(ms, logFile); reportData.PlatformName = this.GetNextString(ms, logFile); reportData.LanguageExt = this.GetNextString(ms, logFile); reportData.TimeOfCrash = this.GetNextString(ms, logFile); reportData.BuildVer = this.GetNextString(ms, logFile); reportData.ChangelistVer = this.GetNextString(ms, logFile); reportData.CommandLine = this.GetNextString(ms, logFile); reportData.BaseDir = this.GetNextString(ms, logFile); reportData.CallStack = this.GetNextString(ms, logFile); reportData.EngineMode = this.GetNextString(ms, logFile); } else if (nextString.Equals("2")) { logFile.WriteLine("Dump is old but supported. DumpVer=" + nextString + " CurVer=" + ReportFile.currentDumpVersion); reportData.Version = int.Parse(nextString); reportData.ComputerName = this.GetNextString(ms, logFile); reportData.UserName = this.GetNextString(ms, logFile); reportData.GameName = this.GetNextString(ms, logFile); reportData.LanguageExt = this.GetNextString(ms, logFile); reportData.TimeOfCrash = this.GetNextString(ms, logFile); reportData.BuildVer = this.GetNextString(ms, logFile); reportData.ChangelistVer = this.GetNextString(ms, logFile); reportData.CommandLine = this.GetNextString(ms, logFile); reportData.BaseDir = this.GetNextString(ms, logFile); reportData.CallStack = this.GetNextString(ms, logFile); reportData.EngineMode = this.GetNextString(ms, logFile); } else { logFile.WriteLine("Outdated dump version " + nextString + "! Current Version is " + ReportFile.currentDumpVersion); return(false); } logFile.WriteLine("\n\n"); return(reportData.IsValid(logFile)); }