diff --git a/Src/AdvancedLogViewer.Common/Parser/LogParser.cs b/Src/AdvancedLogViewer.Common/Parser/LogParser.cs index a02fda5..de3f26f 100644 --- a/Src/AdvancedLogViewer.Common/Parser/LogParser.cs +++ b/Src/AdvancedLogViewer.Common/Parser/LogParser.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Text.RegularExpressions; using AdvancedLogViewer.Common.Parser.LogPartsFileNameStrategies; +using System.IO.Compression; namespace AdvancedLogViewer.Common.Parser { @@ -95,7 +96,20 @@ public void LoadLogEntries() this.LogFileExists = true; using (FileStream fs = File.Open(this.LogFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - using (TextReader sr = new StreamReader(fs, true)) + var isGzip = false; + if (LogFileName.Contains(".gz")) + { + // Check for GZip file mark + var firstByte = fs.ReadByte(); + var secondByte = fs.ReadByte(); + isGzip = firstByte == 0x1f && secondByte == 0x8b; + // Rewind the stream + fs.Seek(0, SeekOrigin.Begin); + } + + Stream stream = isGzip ? new GZipStream(fs, CompressionMode.Decompress) : fs; // Not necessary to employ using block on GZipStream, StreamReader closes it + + using (TextReader sr = new StreamReader(stream, true)) { LogEntry tmpLogEntry = new LogEntry(); LogEntry currentLogEntry = null; @@ -103,7 +117,7 @@ public void LoadLogEntries() StringBuilder messageBuilder = new StringBuilder(524288); //0.5 MB - long fileSize = fs.Length; + long fileSize = fs.Length; // Can't use stream here as GZipStream does not support Length int readFromLine = 1; DateTime nextProgressReportTime = DateTime.Now.AddMilliseconds(50); int nextProgressReportLine = 200; diff --git a/Src/AdvancedLogViewer/UI/ViewLogAsText.cs b/Src/AdvancedLogViewer/UI/ViewLogAsText.cs index 54a082c..4d5168b 100644 --- a/Src/AdvancedLogViewer/UI/ViewLogAsText.cs +++ b/Src/AdvancedLogViewer/UI/ViewLogAsText.cs @@ -7,6 +7,7 @@ using System.Text; using System.Windows.Forms; using System.IO; +using System.IO.Compression; namespace AdvancedLogViewer.UI { @@ -22,7 +23,20 @@ public void LoadFile(string fileName, int numberOfRowsToShow) this.Text = fileName; using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - using (TextReader sr = new StreamReader(fs)) + var isGzip = false; + if (fileName.Contains(".gz")) + { + // Check for GZip file mark + var firstByte = fs.ReadByte(); + var secondByte = fs.ReadByte(); + isGzip = firstByte == 0x1f && secondByte == 0x8b; + // Rewind the stream + fs.Seek(0, SeekOrigin.Begin); + } + + Stream stream = isGzip ? new GZipStream(fs, CompressionMode.Decompress) : fs; // Not necessary to employ using block on GZipStream, StreamReader closes it + + using (TextReader sr = new StreamReader(stream)) { string line; int lineNumber = 0;