Beispiel #1
0
        public void Load()
        {
            if (!File.Exists(FileName))
            {
                throw new FileNotFoundException($"Could not find SHN File {FileName}.");
            }

            byte[] data;
            using (var file = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                var reader = new BinaryReader(file);
                CryptHeader = reader.ReadBytes(32);
                var Length = reader.ReadInt32() - 36; //minus int + header
                data = reader.ReadBytes(Length);
                FileCrypto.Crypt(data, 0, Length);
                //File.WriteAllBytes("Output.dat", data); //debug purpose
            }

            using (var stream = new MemoryStream(data))
            {
                var reader = new SHNReader(stream);
                Header              = reader.ReadUInt32();
                RecordCount         = reader.ReadUInt32();
                DefaultRecordLength = reader.ReadUInt32();
                ColumnCount         = reader.ReadUInt32();
                GenerateColumns(reader);
                GenerateRows(reader);
            }

            data = null;
        }
Beispiel #2
0
        private void InternalSave(string path)
        {
            try
            {
                isSaving = true;
                UpdateDefaultRecordLength();
                byte[] content;
                using (MemoryStream encrypted = new MemoryStream())
                {
                    SHNWriter writer = new SHNWriter(encrypted);
                    writer.Write(this.Header);
                    writer.Write((uint)this.Rows.Count);
                    writer.Write(this.DefaultRecordLength);
                    writer.Write((uint)this.Columns.Count);
                    WriteColumns(writer);
                    WriteRows(writer);
                    content = new byte[encrypted.Length];
                    encrypted.Seek(0, SeekOrigin.Begin);
                    encrypted.Read(content, 0, content.Length);
                }

                FileCrypto.Crypt(content, 0, content.Length);
                using (FileStream final = File.Create(path))
                {
                    BinaryWriter writer = new BinaryWriter(final);
                    writer.Write(CryptHeader);
                    writer.Write((int)(content.Length + 36));
                    writer.Write(content);
                }

                this.FileName = path;
                if (OnSaveFinished != null)
                {
                    OnSaveFinished.Invoke(this);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message + ex.StackTrace);
                if (OnSaveError != null)
                {
                    OnSaveError.Invoke(this, ex.Message);
                }
            }
            finally
            {
                isSaving = false;
            }
        }
Beispiel #3
0
        private void InternalSave(string path)
        {
            try
            {
                isSaving = true;
                UpdateDefaultRecordLength();
                byte[] content;
                using (var encrypted = new MemoryStream())
                {
                    var writer = new SHNWriter(encrypted);
                    writer.Write(Header);
                    writer.Write((uint)Rows.Count);
                    writer.Write(DefaultRecordLength);
                    writer.Write((uint)Columns.Count);
                    WriteColumns(writer);
                    WriteRows(writer);
                    content = new byte[encrypted.Length];
                    encrypted.Seek(0, SeekOrigin.Begin);
                    encrypted.Read(content, 0, content.Length);
                }

                FileCrypto.Crypt(content, 0, content.Length);
                using (var final = File.Create(path))
                {
                    var writer = new BinaryWriter(final);
                    writer.Write(CryptHeader);
                    writer.Write(content.Length + 36);
                    writer.Write(content);
                }

                FileName = path;
                OnSaveFinished?.Invoke(this);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex + ex.StackTrace);
                OnSaveError?.Invoke(this, ex.ToString());
            }
            finally
            {
                isSaving = false;
            }
        }