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; }
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; } }
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; } }