public void Deserialize(Stream stream)
		{
			List<PackageEntry> entries = new List<PackageEntry>();

			// Types
			while (true)
			{
				string typeName = stream.ReadASCIIZ();
				if (typeName == "")
				{
					break;
				}

				// Directories
				while (true)
				{
					string directoryName = stream.ReadASCIIZ();
					if (directoryName == "")
					{
						break;
					}

					// Files
					while (true)
					{
						string fileName = stream.ReadASCIIZ();
						if (fileName == "")
						{
							break;
						}

						PackageEntry entry = new PackageEntry();
						entry.FileName = fileName;
						entry.DirectoryName = directoryName.Replace("/", "\\");
						entry.TypeName = typeName;
						entry.HashOrTimestamp = stream.ReadU32();
						entry.SmallData = new byte[stream.ReadU16()];
						entry.ArchiveIndex = stream.ReadU16();
						entry.Offset = stream.ReadU32();
						entry.Size = stream.ReadU32();
						entry.Unknown = stream.ReadU16();

						if (entry.Unknown != 0xFFFF)
						{
							throw new PackageFileException();
						}

						if (entry.SmallData.Length > 0)
						{
							stream.Read(entry.SmallData, 0, entry.SmallData.Length);
						}

						entries.Add(entry);
					}
				}
			}

			this.Entries = entries;
		}
Beispiel #2
0
        public void Deserialize(Stream stream)
        {
            List <PackageEntry> entries = new List <PackageEntry>();

            // Types
            while (true)
            {
                string typeName = stream.ReadASCIIZ();
                if (typeName == "")
                {
                    break;
                }

                // Directories
                while (true)
                {
                    string directoryName = stream.ReadASCIIZ();
                    if (directoryName == "")
                    {
                        break;
                    }

                    // Files
                    while (true)
                    {
                        string fileName = stream.ReadASCIIZ();
                        if (fileName == "")
                        {
                            break;
                        }

                        PackageEntry entry = new PackageEntry();
                        entry.FileName        = fileName;
                        entry.DirectoryName   = directoryName.Replace("/", "\\");
                        entry.TypeName        = typeName;
                        entry.HashOrTimestamp = stream.ReadU32();
                        entry.SmallData       = new byte[stream.ReadU16()];
                        entry.ArchiveIndex    = stream.ReadU16();
                        entry.Offset          = stream.ReadU32();
                        entry.Size            = stream.ReadU32();
                        entry.Unknown         = stream.ReadU16();

                        if (entry.Unknown != 0xFFFF)
                        {
                            throw new PackageFileException();
                        }

                        if (entry.SmallData.Length > 0)
                        {
                            stream.Read(entry.SmallData, 0, entry.SmallData.Length);
                        }

                        entries.Add(entry);
                    }
                }
            }

            this.Entries = entries;
        }