private byte[] WriteHiz(HizArchive hizArchive) { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write(hizArchive.header); writer.Write((byte)0);// header writer.Write(hizArchive.file_count); writer.Write(hizArchive.max_compress_size); for (int i = 0; i < hizArchive.file_count; i++) { HizFile hizFile = hizArchive.hizFiles[i]; Console.WriteLine("Packing {0}", hizFile.name); writer.Write(decoder.DecodeData(BitConverter.GetBytes((short)hizFile.type))); writer.Write(decoder.DecodeData(BitConverter.GetBytes(hizFile.compress_size))); writer.Write(decoder.DecodeData(BitConverter.GetBytes(hizFile.decompress_size))); writer.Write(decoder.DecodeData(BitConverter.GetBytes((short)hizFile.name.Length))); writer.Write(decoder.DecodeData(Encoding.UTF8.GetBytes(hizFile.name))); writer.Write(hizFile.data); } Console.WriteLine("\nPacked {0} files.", hizArchive.file_count); writer.Close(); return(stream.ToArray()); }
private void ReadHizArchive(byte[] hiz_buffer) { BinaryReader reader = new BinaryReader(new MemoryStream(hiz_buffer)); HizArchive = new HizArchive(); if (!ReadHizHeader(reader)) { return; } Console.WriteLine("File count: {0}\nChecksum: 0x{1}\nMax compress size: {2}\n", HizArchive.file_count, checksum.ToString("X"), HizArchive.max_compress_size); HizArchive.hizFiles = new HizFile[HizArchive.file_count]; for (int i = 0; i < HizArchive.file_count; i++) { HizFile hizFile = new HizFile(); hizFile.type = decoder.DecodeInt16(reader); hizFile.compress_size = decoder.DecodeInt32(reader); hizFile.decompress_size = decoder.DecodeInt32(reader); int name_len = decoder.DecodeInt16(reader); byte[] name = decoder.DecodeData(reader.ReadBytes(name_len)); hizFile.name = Encoding.UTF8.GetString(name); if (hizFile.isCompressed()) { hizFile.data = Unzip.GetData(reader.ReadBytes(hizFile.compress_size), true); } else { hizFile.data = reader.ReadBytes(hizFile.decompress_size); } HizArchive.hizFiles[i] = hizFile; } }
public void Write(HizArchive hizArchive, string name) { BinaryWriter writer = new BinaryWriter(File.OpenWrite(name)); Console.WriteLine("Write {0}:", name); decoder.Clear(); byte[] hiz_data = WriteHiz(hizArchive); writer.Write("H2Z".ToCharArray()); writer.Write((byte)0); // header writer.Write(0); //checksum writer.Write(hiz_data.Length); //buffer_size writer.Write(hiz_data); writer.Close(); }
public void ReadFromDir(string dir) { HizArchive = new HizArchive(); HizFile[] hizFiles = ReadHizFilesFromDir(dir); if (hizFiles.Length == 0) { Console.WriteLine("Hiz files count = 0."); return; } HizArchive.header = "HIZ".ToCharArray(); HizArchive.file_count = hizFiles.Length; HizArchive.max_compress_size = 0; HizArchive.hizFiles = hizFiles; }