示例#1
0
        private void Read(BinaryReader br)
        {
            string readMagic = Encoding.ASCII.GetString(br.ReadBytes(4));

            if (!String.Equals(readMagic, "RLSM"))
            {
                throw new InvalidMagicNumberException(readMagic);
            }
            this.MajorVersion = br.ReadInt16();
            this.MinorVersion = br.ReadInt16();

            int projectNameIndex = br.ReadInt32();

            this.ReleaseVersion = br.ReadUInt32();

            int folderCount = br.ReadInt32();

            List <ReleaseManifestFolderEntry> folders = new List <ReleaseManifestFolderEntry>();

            for (int i = 0; i < folderCount; i++)
            {
                folders.Add(new ReleaseManifestFolderEntry(br));
            }

            int fileCount = br.ReadInt32();

            List <ReleaseManifestFileEntry> files = new List <ReleaseManifestFileEntry>();

            for (int i = 0; i < fileCount; i++)
            {
                files.Add(new ReleaseManifestFileEntry(br));
            }

            int nameCount         = br.ReadInt32();
            int nameSectionLength = br.ReadInt32();

            this.Names.AddRange(Encoding.ASCII.GetString(br.ReadBytes(nameSectionLength)).Split('\0'));
            this.Names.RemoveAt(this.Names.Count - 1);
            if (nameCount != this.Names.Count)
            {
                throw new InvalidNamesListException();
            }

            this.ProjectName = this.Names[projectNameIndex];

            // Assigning names and parent/sub entries to all file and folder entries
            foreach (ReleaseManifestFolderEntry folderEntry in folders)
            {
                folderEntry.Name = this.Names[folderEntry.NameIndex];
                for (int i = 0; i < folderEntry.SubFolderCount; i++)
                {
                    folders[folderEntry.SubFolderStartIndex + i].Parent = folderEntry;
                    folderEntry.Folders.Add(folders[folderEntry.SubFolderStartIndex + i]);
                }
                for (int i = 0; i < folderEntry.FileCount; i++)
                {
                    files[folderEntry.FileListStartIndex + i].Folder = folderEntry;
                    folderEntry.Files.Add(files[folderEntry.FileListStartIndex + i]);
                }
            }
            foreach (ReleaseManifestFileEntry fileEntry in files)
            {
                fileEntry.Name = this.Names[fileEntry.NameIndex];
            }
            this.Project = folders[0];
        }
示例#2
0
 public ReleaseManifestFolderEntry(string name, int nameIndex, ReleaseManifestFolderEntry parent)
 {
     this.Name      = name;
     this.NameIndex = nameIndex;
     this.Parent    = parent;
 }