private void WriteFile(FileStream stream) { FilePackInfo packInfo = PackInfo; stream.Write(MAGIC, 0, 4); _write(stream, PaddedBytes(packInfo.FileCount)); foreach (int headerTableOffset in packInfo.GetHeaderTableOffsets()) { _write(stream, PaddedBytes(headerTableOffset)); } _write(stream, PaddedBytes(0)); int num = packInfo.CrcTable.EndOffset(); foreach (string qualifiedFileName in packInfo.QualifiedFileNames) { int num2 = (int)packInfo.FileSizeDict[qualifiedFileName]; _write(stream, PaddedBytes(num)); num += num2; num += _calculate16BytePadding(num); } foreach (string fileExtension in packInfo.FileExtensions) { _write(stream, Encoding.ASCII.GetBytes(fileExtension)); _write(stream, NUL); } _write(stream, PaddedBytes(packInfo.NameTableBlockSize)); foreach (string fileBaseName in packInfo.FileBaseNames) { int length = packInfo.NameTableBlockSize - fileBaseName.Length; _write(stream, Encoding.ASCII.GetBytes(fileBaseName)); _write(stream, NulPad(length)); } int num3 = (int)stream.Position % 4; if (num3 != 0) { _write(stream, NulPad(4 - num3)); } foreach (string qualifiedFileName2 in packInfo.QualifiedFileNames) { _write(stream, PaddedBytes((int)packInfo.FileSizeDict[qualifiedFileName2])); } _write(stream, NulPad(packInfo.CrcTable.TotalSize())); foreach (string qualifiedFileName3 in packInfo.QualifiedFileNames) { int offset = (int)packInfo.FileSizeDict[qualifiedFileName3]; int num4 = _calculate16BytePadding(offset); byte[] bytes = File.ReadAllBytes(qualifiedFileName3); _write(stream, bytes); if (num4 > 0) { _write(stream, NulPad(num4)); } } }
public Writer(FilePackInfo packInfo) { PackInfo = packInfo; }