public static ArchiveFileLib FromStream(Stream stream) { ArchiveFileLib file = new ArchiveFileLib(); byte[] buffer = new byte[Windows.Constants.IMAGE_ARCHIVE_START_SIZE]; stream.Read(buffer, 0, Windows.Constants.IMAGE_ARCHIVE_START_SIZE); bool valid = Encoding.ASCII.GetString(buffer) == Windows.Constants.IMAGE_ARCHIVE_START; if (!valid) throw new InvalidDataException("Not a valid archive file"); file.first.FromStream(stream); file.second.FromStream(stream); file.longnames.FromStream(stream); List<ObjectFileMember> objects = new List<ObjectFileMember>(); while (stream.CanRead && (stream.Position < stream.Length)) { try { var ofm = new ObjectFileMember(); ofm.FromStream(stream); objects.Add(ofm); } catch { file.Errors = true; break; } } file.objects = objects.ToArray(); return file; }
public ArchiveFileViewModel(ArchiveFileLib file) { _members.Clear(); _file = file; //Members.Add(new ArchiveMemberViewModel(File.first)); //Members.Add(new ArchiveMemberViewModel(File.second)); //Members.Add(new ArchiveMemberViewModel(File.longnames)); foreach (var v in _file.objects) { var model = new ObjectFileViewModel(v); model.ResolveName(_file.longnames); _members.Add(model); } _longNames = new LongNamesMemberViewModel(file.longnames); }