public void ReadGuid() { var testValue = new Guid( "75B22633-668E-11CF-A6D9-00AA0062CE6C" ); using( var stream = new MemoryStream() ) { var bytes = testValue.ToByteArray(); stream.Write( bytes, 0, bytes.Length ); stream.Seek( 0, SeekOrigin.Begin ); var value = stream.ReadGuid(); Assert.AreEqual( value, testValue ); } }
/// <summary> /// Resumes a rollover log /// </summary> /// <param name="fileName">the name of the log file to load.</param> public RolloverLogFile(string fileName) { FileName = fileName; SourceFiles.Clear(); IsValid = false; try { byte[] data = File.ReadAllBytes(fileName); if (data.Length < Header.Length + 1 + 20) //Header + Version + SHA1 { Log.Publish(MessageLevel.Warning, "Failed to load file.", "Expected file length is not long enough", fileName); return; } for (int x = 0; x < Header.Length; x++) { if (data[x] != Header[x]) { Log.Publish(MessageLevel.Warning, "Failed to load file.", "Incorrect File Header", fileName); return; } } byte[] hash = new byte[20]; Array.Copy(data, data.Length - 20, hash, 0, 20); using (var sha = new SHA1Managed()) { var checksum = sha.ComputeHash(data, 0, data.Length - 20); if (!hash.SequenceEqual(checksum)) { Log.Publish(MessageLevel.Warning, "Failed to load file.", "Hashsum failed.", fileName); return; } } var stream = new MemoryStream(data); stream.Position = Header.Length; int version = stream.ReadNextByte(); switch (version) { case 1: int count = stream.ReadInt32(); while (count > 0) { count--; SourceFiles.Add(stream.ReadGuid()); } DestinationFile = stream.ReadGuid(); IsValid = true; return; default: Log.Publish(MessageLevel.Warning, "Failed to load file.", "Version Not Recgonized.", fileName); SourceFiles.Clear(); return; } } catch (Exception ex) { Log.Publish(MessageLevel.Warning, "Failed to load file.", "Unexpected Error", fileName, ex); SourceFiles.Clear(); return; } }