private void LoadEntries(bool checksum, IdentifyEntry identify) { using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { // Skip first 92 bytes stream.Seek(SkipBytes, SeekOrigin.Begin); // Read file while (stream.Position < stream.Length) { // Read entry var entry = UpdateEntry.Read(stream, checksum); // Add to list Entries.Add(entry); // Identify if (identify != null) { entry.Type = identify(entry); } // Skip file data stream.Seek(entry.FileSize, SeekOrigin.Current); // Read remainder var remainder = Utilities.Remainder(entry); if (remainder < Utilities.UintSize) { stream.Seek(remainder, SeekOrigin.Current); } } } }
private UpdateFile(string fileName, bool checksum, IdentifyEntry identify) { // Store filename _fileName = fileName; // Load entries LoadEntries(checksum, identify); }
/// <summary> /// Open an existing update file /// </summary> /// <param name="fileName">Filename</param> /// <param name="checksum">Verify header checksum</param> /// <param name="identify">Delegate to identify an <see cref="UpdateEntry"/></param> /// <returns><see cref="UpdateFile"/></returns> public static UpdateFile Open(string fileName, bool checksum = true, IdentifyEntry identify = null) { return(new UpdateFile(fileName, checksum, identify)); }