コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }