Esempio n. 1
0
        internal void Write(BinaryWriter bw)
        {
            bw.Write(PexMagic);
            bw.Write(MajorVersion);
            bw.Write(MinorVersion);
            bw.Write(GameId);
            bw.Write(CompilationTime.ToUInt64());
            bw.Write(SourceFileName);
            bw.Write(Username);
            bw.Write(MachineName);

            var memoryTrib = new MemoryTributary();
            var bw2        = new PexWriter(memoryTrib, Encoding.UTF8, this._gameCategory.IsBigEndian());
            var writeMeta  = new PexWriteMeta(_gameCategory, bw2);

            WriteContent(writeMeta);

            bw.Write((ushort)writeMeta.Strings.Count);
            foreach (var pair in writeMeta.Strings
                     .OrderBy(x => x.Value))
            {
                bw.Write(pair.Key);
            }

            memoryTrib.Position = 0;
            memoryTrib.CopyTo(bw.BaseStream);
        }
Esempio n. 2
0
        /// <summary>
        /// Write to a .pex file.
        /// </summary>
        /// <param name="pexFile">The pex file to write.</param>
        /// <param name="outputPath">Output path.</param>
        /// <param name="gameCategory">Game Category of the pex file.</param>
        public static void WritePexFile(this PexFile pexFile, string outputPath, GameCategory gameCategory)
        {
            var dirName = Path.GetDirectoryName(outputPath);

            Directory.CreateDirectory(dirName ?? string.Empty);

            if (File.Exists(outputPath))
            {
                File.Delete(outputPath);
            }

            using var fs = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
            using var bw = new PexWriter(fs, Encoding.UTF8, gameCategory.IsBigEndian());

            pexFile.Write(bw);
        }