UDKExplorer.UDK.UDKObject.WriteFile C# (CSharp) Méthode

WriteFile() private méthode

private WriteFile ( FileStream file ) : void
file FileStream
Résultat void
        private void WriteFile(FileStream file)
        {
            MemoryStream m = new MemoryStream();
            m.Write(Header, 0, Header.Length);
            NameOffset = (int)m.Length;
            foreach(NameEntry e in Names)
            {
                m.Write(BitConverter.GetBytes(e.name.Length + 1), 0, 4);
                for (int i = 0; i < e.name.Length; i++)
                    m.WriteByte((byte)e.name[i]);
                m.WriteByte(0);
                m.Write(BitConverter.GetBytes(e.unk), 0, 4);
                m.Write(BitConverter.GetBytes(e.flags), 0, 4);
            }
            ImportOffset = (int)m.Length;
            foreach (ImportEntry e in Imports)
            {
                m.Write(e.raw, 0, e.raw.Length);
            }            
            ExportOffset = (int)m.Length;
            for (int i = 0; i < ExportCount; i++)//add export list
            {
                int off = (int)m.Length;
                ExportEntry e = Exports[i];
                e._off = off;
                Exports[i] = e;
                m.Write(e.raw, 0, e.raw.Length);
            }
            fz.start = (int)m.Length;
            fz.end = fz.start + fz.raw.Length;
            m.Write(fz.raw, 0, fz.raw.Length);
            for (int i = 0; i < ExportCount; i++)//add unchanged stuff
                if (!Exports[i].IsChanged)
                {
                    ExportEntry e = Exports[i];
                    e.offset = (int)m.Length;
                    m.Write(e.data, 0, e.data.Length);
                    Exports[i] = e;
                }
                else
                {
                    ExportEntry e = Exports[i];
                    m.Write(e.olddata, 0, e.olddata.Length);
                }
            for (int i = 0; i < ExportCount; i++)//add new stuff
                if (Exports[i].IsChanged)
                {
                    ExportEntry e = Exports[i];
                    e.offset = (int)m.Length;
                    m.Write(e.data, 0, e.data.Length);
                    Exports[i] = e;
                }
            for (int i = 0; i < ExportCount; i++)//patch lists
            {
                ExportEntry e = Exports[i];
                m.Seek(e._off + 32, SeekOrigin.Begin);
                m.Write(BitConverter.GetBytes(e.data.Length), 0, 4);
                m.Write(BitConverter.GetBytes(e.offset), 0, 4);
            }
            m.Seek(_HeaderOff, SeekOrigin.Begin);
            m.Write(BitConverter.GetBytes(NameCount), 0, 4);
            m.Write(BitConverter.GetBytes(NameOffset), 0, 4);
            m.Write(BitConverter.GetBytes(ExportCount), 0, 4);
            m.Write(BitConverter.GetBytes(ExportOffset), 0, 4);
            m.Write(BitConverter.GetBytes(ImportCount), 0, 4);
            m.Write(BitConverter.GetBytes(ImportOffset), 0, 4);
            m.Write(BitConverter.GetBytes(fz.start), 0, 4);
            m.Write(BitConverter.GetBytes(fz.end), 0, 4);
            m.Seek(8, SeekOrigin.Begin);
            m.Write(BitConverter.GetBytes(fz.end), 0, 4);
            m.Seek(0, SeekOrigin.Begin);
            for (int i = 0; i < m.Length; i++)
                file.WriteByte((byte)m.ReadByte());
        }