private void WriteRandomBytesArray(WrapReader reader, BinaryWriter writer, ref bool typeAlreadyRead, ref TypeOfWriteData typeWriteData) { byte endString = (byte)TypeOfWriteData.EndString; List <byte> bytesToWrite = new List <byte>(); do { byte currentByte = reader.ReadByte(); if (currentByte == endString) { currentByte = reader.ReadByte(); if (currentByte != endString) { // Save information about type next string typeAlreadyRead = false; typeWriteData = (TypeOfWriteData)currentByte; break; } } bytesToWrite.Add(currentByte); } while (true); writer.BaseStream.Write(bytesToWrite.ToArray()); }
public void Decompress() { libValueToStatus = new Dictionary <byte, string>(); using (var fileRead = File.Open(inputFileName, FileMode.Open)) using (GZipStream zipReader = new GZipStream(fileRead, CompressionMode.Decompress, true)) using (var mReader = new MemoryStream()) using (var _reader = new BinaryReader(mReader)) { using (MemoryStream mWriter = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(mWriter)) { WrapReader reader = new WrapReader(_reader, zipReader, mReader); bool typeOfWriteDataNoReaded = true; TypeOfWriteData typeData = TypeOfWriteData.String; do { if (typeOfWriteDataNoReaded) { typeData = (TypeOfWriteData)reader.ReadByte(); } else { typeOfWriteDataNoReaded = true; } if (typeData == TypeOfWriteData.StringLogFormat) { WriteStringLogFormat(reader, writer); } else if (typeData == TypeOfWriteData.String) { WriteString(reader, writer); } else if (typeData == TypeOfWriteData.RandomBytes) { WriteRandomBytesArray(reader, writer, ref typeOfWriteDataNoReaded, ref typeData); } else if (typeData == TypeOfWriteData.Header) { GetHeader(reader); } else { break; } } while (true); mWriter.Position = 0; FileMode fMode = File.Exists(outputFileName) ? FileMode.Truncate : FileMode.Create; using (var file = File.Open(outputFileName, fMode)) { if (File.Exists(tmpFileName)) { using (var tmp = File.Open(tmpFileName, FileMode.Open)) tmp.CopyTo(file); File.Delete(tmpFileName); } mWriter.CopyTo(file); } } } }