public Type GetType(SHNColumn col) { switch (col.Type) { default: return typeof(object); case 1: case 12: return typeof(byte); case 2: return typeof(UInt16); case 3: case 11: return typeof(UInt32); case 5: return typeof(Single); case 0x15: case 13: return typeof(Int16); case 0x10: return typeof(byte); case 0x12: case 0x1b: return typeof(UInt32); case 20: return typeof(SByte); case 0x16: return typeof(Int32); case 0x18: case 0x1a: case 9: return typeof(string); } }
public SHNFile(string path) { try { columns.Clear(); this.Path = path; if (System.IO.Path.GetFileNameWithoutExtension(path).ToLower().Contains("textdata")) isTextData = true; BinaryReaderEx r = new BinaryReaderEx(File.OpenRead(path)); if (path.EndsWith(".shn")) { this.CryptHeader = r.ReadBytes(0x20); data = r.ReadBytes(r.ReadInt32() - 0x24); } else data = r.ReadBytes((int)r.Length); r.Close(); if (Properties.Settings.Default.isNewCrypto == true) this.Decrypt(data, 0, data.Length, true); else this.Decrypt(data, 0, data.Length); r = new BinaryReaderEx(new MemoryStream(data)); this.Header = r.ReadUInt32(); //FileStream stream = new FileStream(System.IO.Path.GetDirectoryName(path) + "\\TestFile.dat", FileMode.Create); //stream.Write(data, 0, data.Length); //stream.Close(); //return; if (!((this.Header == 0xcdcdcdcd) | (this.Header == 0))) { //bleh, why check, unk.dat is useless, outspark uses other enc } //Parse columns this.RecordCount = r.ReadUInt32(); this.DefaultRecordLength = r.ReadUInt32(); this.ColumnCount = r.ReadUInt32(); this.ColumnNames = new string[this.ColumnCount]; this.ColumnTypes = new uint[this.ColumnCount]; this.ColumnLengths = new int[this.ColumnCount]; int num2 = 2; int unkCols = 0; for (uint i = 0; i < this.ColumnCount; i++) { string str = r.ReadString(0x30); // if (str.Length < 2) MessageBox.Show(str.Length.ToString()); uint num4 = r.ReadUInt32(); int num5 = r.ReadInt32(); SHNColumn col = new SHNColumn(); if (str.Length == 0) { str = "UnkCol" + unkCols.ToString(); unkCols++; } col.name = str; col.Type = num4; col.Lenght = num5; columns.Add(col); this.ColumnNames[i] = str; this.ColumnTypes[i] = num4; this.ColumnLengths[i] = num5; num2 += num5; } if (num2 != this.DefaultRecordLength) { throw new Exception("Wrong record lenght!"); } //generate columns this.GenerateColumns(table, columns); //add data into rows this.ReadRows(r, table); } catch (Exception e) { Stream X = new FileStream("unk.dat", FileMode.OpenOrCreate); BinaryWriter lol = new BinaryWriter(X); lol.Write(data, 0, data.Length); lol.Close(); throw new Exception("Unknown File Type -- dec to unk.dat Reason: " + e.Message); } }
public void CreateColumn(string name, int len, uint type, string defaultval) { SHNColumn newCol = new SHNColumn(); newCol.name = name; newCol.Lenght = len; newCol.Type = type; columns.Add(newCol); DataColumn column = new DataColumn(); column.ColumnName = name; column.DefaultValue = defaultval; column.DataType = GetType(newCol); table.Columns.Add(column); }