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); }
/// <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); }