コード例 #1
0
        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);
                    }
                }
            }
        }
コード例 #2
0
        private UpdateFile(string fileName, bool checksum, IdentifyEntry identify)
        {
            // Store filename
            _fileName = fileName;

            // Load entries
            LoadEntries(checksum, identify);
        }
コード例 #3
0
 /// <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));
 }