コード例 #1
0
ファイル: Writer.cs プロジェクト: xxk-i/NieRExplorerReborn
        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));
                }
            }
        }
コード例 #2
0
ファイル: Writer.cs プロジェクト: xxk-i/NieRExplorerReborn
 public Writer(FilePackInfo packInfo)
 {
     PackInfo = packInfo;
 }