예제 #1
0
        private static void WriteBlockInfo(BinaryWriter writer, ulong offset, BlockInfo blockInfo, FileHeader.Version version)
        {
            writer.BaseStream.Position = (long)offset;

            writer.Write((System.UInt32)blockInfo.flags);
            writer.Write((System.UInt32)blockInfo.fileCount);
            FileHeader.WriteUIntVersionAware(writer, blockInfo.directorySize, version);
            FileHeader.WriteUIntVersionAware(writer, blockInfo.decompressedSize, version);
            FileHeader.WriteUIntVersionAware(writer, blockInfo.nextBlock, version);
        }
예제 #2
0
        private static void WriteHeader(BinaryWriter writer, ulong offset, FileHeader fileHeader, FileHeader.Version version)
        {
            writer.BaseStream.Position = (long)offset;

            byte[] magic = FileHeader.GetMagicBytes(fileHeader.version);
            writer.Write(magic);

            writer.Write(fileHeader.unkown);

            FileHeader.WriteUIntVersionAware(writer, fileHeader.firstBlockOffset, version);
        }
예제 #3
0
        private static byte[] CreateDirEntryBytes(DirEntry dirEntry, FileHeader.Version version)
        {
            byte[]       result       = new byte[DirEntry.GetSize(version)];
            MemoryStream memoryStream = new MemoryStream(result);
            BinaryWriter writer       = new BinaryWriter(memoryStream);

            byte[] filenameBytes = Encoding.Unicode.GetBytes(dirEntry.filename);
            writer.Write(filenameBytes, 0, (int)Math.Min(DirEntry.GetFilenameSize(), filenameBytes.Length));
            writer.BaseStream.Position = DirEntry.GetFilenameSize();

            FileHeader.WriteUIntVersionAware(writer, dirEntry.offset, version);
            FileHeader.WriteUIntVersionAware(writer, dirEntry.compressed, version);
            FileHeader.WriteUIntVersionAware(writer, dirEntry.filesize, version);
            FileHeader.WriteUIntVersionAware(writer, dirEntry.timestamp, version);
            FileHeader.WriteUIntVersionAware(writer, dirEntry.unknown, version);

            return(result);
        }