Ejemplo n.º 1
0
        public void Open(String archivePath, bool newArchive)
        {
            mArchivePath = archivePath;
            mMainHeader  = new PAKMainHeader();
            mHeaders     = new List <PAKFileHeader>();

            if (newArchive)
            {
                mStream = File.Open(archivePath, FileMode.Create);

                BinaryWriter writer = new BinaryWriter(mStream, Encoding.UTF8, true);
                mMainHeader.Write(writer);
            }
            else
            {
                mStream = File.Open(archivePath, FileMode.Open);

                BinaryReader reader = new BinaryReader(mStream, Encoding.UTF8, true);
                mMainHeader.mSignature = reader.ReadChars(PAKMainHeader.SIGNATURE_LENGTH);

                if (mMainHeader.Signature != "PACK")
                {
                    return;
                }

                mMainHeader.mDirectoryOffset = reader.ReadInt32();
                mMainHeader.mDirectoryLength = reader.ReadInt32();

                if (mMainHeader.mDirectoryOffset > PAKMainHeader.SIZE_OF)
                {
                    int numFiles = mMainHeader.NumFiles;
                    reader.BaseStream.Seek(mMainHeader.mDirectoryOffset, SeekOrigin.Begin);
                    for (int i = 0; i < numFiles; ++i)
                    {
                        PAKFileHeader header = new PAKFileHeader();
                        header.Read(reader);
                        mHeaders.Add(header);
                    }
                }
            }

            OnEntriesUpdated();
        }