private static bool TryLocateMpqHeader( Stream sourceStream, #if NETCOREAPP3_0 [NotNullWhen(true)] #endif out MpqHeader?mpqHeader, out long headerOffset) { sourceStream.Seek(0, SeekOrigin.Begin); using (var reader = new BinaryReader(sourceStream, new UTF8Encoding(), true)) { for (headerOffset = 0; headerOffset < sourceStream.Length - MpqHeader.Size; headerOffset += PreArchiveAlignBytes) { if (reader.ReadUInt32() == MpqHeader.MpqId) { sourceStream.Seek(-4, SeekOrigin.Current); mpqHeader = MpqHeader.FromReader(reader); mpqHeader.HeaderOffset = (uint)headerOffset; return(true); } sourceStream.Seek(PreArchiveAlignBytes - 4, SeekOrigin.Current); } } mpqHeader = null; headerOffset = -1; return(false); }
private static long LocateMpqHeader(Stream sourceStream, out MpqHeader mpqHeader) { using (var reader = new BinaryReader(sourceStream, new UTF8Encoding(), true)) { for (long i = 0; i < sourceStream.Length - MpqHeader.Size; i += PreArchiveAlignBytes) { sourceStream.Seek(i, SeekOrigin.Begin); mpqHeader = MpqHeader.FromReader(reader); if (mpqHeader?.SetHeaderOffset(i) ?? false) { return(i); } } } mpqHeader = null; return(-1); }