Exemple #1
0
        /// <summary>
        /// Loads the file. The progress parameter is a way for us
        /// to report progress to the calling thread.
        /// </summary>
        /// <param name="progress"></param>
        public async Task Load(IProgress <int> progress)
        {
            using (reader = new BinaryReader(File.OpenRead(FilePath)))
            {
                // Save file's header.
                BaseHeader = reader.ReadBytes(0x20);

                // Read the bytes into a byte array for decrypting.
                fileData = reader.ReadBytes(reader.ReadInt32() - 0x24);

                // Decrypt data
                Crypter.Crypt(fileData, 0, fileData.Length);

                // Re-initalize the reader with the deciphered data.
                reader = new BinaryReader(new MemoryStream(fileData));

                DataHeader          = reader.ReadUInt32();
                recordCount         = reader.ReadUInt32();
                defaultRecordLength = reader.ReadUInt32();
                columnCount         = reader.ReadUInt32();

                // Read columns
                var unknownColumnCount = 0;
                var recordLength       = 2;
                for (int i = 0; i < columnCount; i++)
                {
                    var columnName   = reader.ReadString(0x30);
                    var columnType   = reader.ReadUInt32();
                    var columnLength = reader.ReadInt32();

                    // If column name is empty, supply it with a UnkCol name.
                    if (columnName.Length == 0 || string.IsNullOrWhiteSpace(columnName))
                    {
                        columnName = "UnkCol" + unknownColumnCount.ToString("00");
                        unknownColumnCount++;
                    }

                    var shnType   = getSHNTypeFromID(columnType);
                    var shnColumn = new SHNColumn(columnName, columnLength, shnType, getTypeFromID(columnType));

                    Columns.Add(shnColumn);
                    recordLength += columnLength;
                }

                if (recordLength != defaultRecordLength)
                {
                    throw new Exception("Record length is invalid!");
                }

                readRows(new Progress <int>(p => progress.Report(p)));
                IsSaved = true;
            }
        }
Exemple #2
0
        /// <summary>
        /// Loads the file. The progress parameter is a way for us
        /// to report progress to the calling thread.
        /// </summary>
        /// <param name="progress"></param>
        public async Task Load(IProgress<int> progress)
        {
            using (reader = new BinaryReader(File.OpenRead(FilePath)))
            {

                // Save file's header.
                BaseHeader = reader.ReadBytes(0x20);

                // Read the bytes into a byte array for decrypting.
                fileData = reader.ReadBytes(reader.ReadInt32() - 0x24);

                // Decrypt data
                Crypter.Crypt(fileData, 0, fileData.Length);

                // Re-initalize the reader with the deciphered data.
                reader = new BinaryReader(new MemoryStream(fileData));

                DataHeader = reader.ReadUInt32();
                recordCount = reader.ReadUInt32();
                defaultRecordLength = reader.ReadUInt32();
                columnCount = reader.ReadUInt32();

                // Read columns
                var unknownColumnCount = 0;
                var recordLength = 2;
                for (int i = 0; i < columnCount; i++)
                {
                    var columnName = reader.ReadString(0x30);
                    var columnType = reader.ReadUInt32();
                    var columnLength = reader.ReadInt32();

                    // If column name is empty, supply it with a UnkCol name.
                    if (columnName.Length == 0 || string.IsNullOrWhiteSpace(columnName))
                    {
                        columnName = "UnkCol" + unknownColumnCount.ToString("00");
                        unknownColumnCount++;
                    }

                    var shnType = getSHNTypeFromID(columnType);
                    var shnColumn = new SHNColumn(columnName, columnLength, shnType, getTypeFromID(columnType));

                    Columns.Add(shnColumn);
                    recordLength += columnLength;
                }

                if (recordLength != defaultRecordLength)
                {
                    throw new Exception("Record length is invalid!");
                }

                readRows(new Progress<int>(p => progress.Report(p)));
                IsSaved = true;
            }
        }