HDSoftware Skrevet 8. mars 2007 Skrevet 8. mars 2007 Heisan Jeg har en klasse, noe slik: Public Class ThisRecord Public Value1 as STRING Public Value2 as LONG Public Value3 as DATE END CLass ok. Denne klassen skal lagres til fil. Dette kan jeg gjøre enten ved å streame den eller jeg kan bruke BinaryWriter/BinaryReader. Sistnevnte er å foretrekke tror jeg fordi jeg da kan bruker WRITER.WriteString('STRENG') og VB gjør resten for meg. Det som derimot er utfordringen er jo at jeg vil lagre alt innholdet i objektet basert på klassen og disse er jo ikke nødvendigvis strenger. .ToString er jo noe av det første som kommer i tankene, men jeg vil jo gjerne konvertere tilbake også og jeg har ikke sett noe .ToDate funksjon. Jeg kan jo selvsagt bruke WRITER.WriteDate(me.date) o.s.v. men da blir det jo ikke kryptert. Derfor må jeg gå veien om en streng og ser for meg denne som separert med en eller annen greie for så å bruke SPLIT npår jeg leser inn igjen. Tips til dette mottas selvsagt med hei dundrande takk... Ole
GeirGrusom Skrevet 8. mars 2007 Skrevet 8. mars 2007 Sjekk ut System.Security.Cryptography.CryptoStream
HDSoftware Skrevet 8. mars 2007 Forfatter Skrevet 8. mars 2007 Sjekk ut System.Security.Cryptography.CryptoStream 8105654[/snapback] Heisan Klarer ikke se hvordan Cryptography gir meg dette. Mulig jeg forklarte meg litt tungt. Jeg har altså en klasse som skal lagres i en fil. Filen skal kunn bestå av en post. Jeg ønsker noe slik (følgende kode vil ikke kompillere så klart): public sub SaveObject(ByRef pObject as SomeClass) dim File as IO.FileStream, Writer as IO.BinaryWriter File = new IO.FileStream("TestFile.txt",IO.FileMode.Open) Writer = new IO.BinaryWriter(File) Writer.Write(me.This3Des.Encrypt(pObject.ToText)) File.Close() end sub Dermed vil hele objektet være lagret som en tekst streng. Når jeg åpner den igjen så vil jeg ha til noe slik: Public sub OpenObject(ByRef pObject as SomeClass) dim File as IO.FileStream, Reader as IO.BinaryReader File = new IO.FileStream("TestFile.txt",IO.FileMode.Open) Reader = new IO-BinaryReader(File) dim LicenseRecord as new String = me.This3Des.Decrypt(Reader.ReadString) pObject = LicenseRecord.ToSomeClass Og det er nettop den konverteringen fra og til et objekt som er utfordringen Flere tips.. Ole
aadnk Skrevet 8. mars 2007 Skrevet 8. mars 2007 Koden og fremgangsmåten blir vel noe lik følgende: Imports System.IOImports System.Text Imports System.Runtime.Serialization Imports System.Security.Cryptography Public Class Form1 Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim oRecord As New ThisRecord, oInput As ThisRecord ' Initialiserer innhold (du bør for øvrig lage en constructor i klassen) With oRecord .Value1 = "Hallo verden!" .Value2 = 42 .Value3 = Date.Now End With ' Initialiserer krypteringsalgoritmen vi vil benytte Dim oCryptic As New DESCryptoServiceProvider oCryptic.Key = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH") oCryptic.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH") ' Lagrer posten SaveObject("C:\Test.dat", oRecord, oCryptic.CreateEncryptor) ' Laster den inn igjen oInput = LoadObject(Of ThisRecord)("C:\Test.dat", oCryptic.CreateDecryptor) Stop End Sub Public Sub SaveObject(Of T)(ByVal File As String, ByVal oElement As T) ' Skriver objektet til en gitt fil SaveObject(New FileStream(File, FileMode.Create), oElement) End Sub Public Sub SaveObject(Of T)(ByVal File As String, ByVal oElement As T, _ ByVal Transform As ICryptoTransform) ' Krypterer objektet til en fil SaveObject(New CryptoStream(New FileStream(File, FileMode.Create), _ Transform, CryptoStreamMode.Write), oElement) End Sub Public Sub SaveObject(Of T)(ByVal SourceStream As Stream, ByVal oElement As T) ' Serialiserer objektet i strømmen With New Formatters.Binary.BinaryFormatter .Serialize(SourceStream, oElement) SourceStream.Close() End With End Sub Public Function LoadObject(Of T)(ByVal File As String) As T ' Laster inn objektet fra en fil Return LoadObject(Of T)(New FileStream(File, FileMode.Open)) End Function Public Function LoadObject(Of T)(ByVal File As String, ByVal Transform As ICryptoTransform) As T ' Krypterer objektet til en fil Return LoadObject(Of T)(New CryptoStream(New FileStream(File, FileMode.Open), _ Transform, CryptoStreamMode.Read)) End Function Public Function LoadObject(Of T)(ByVal SourceStream As Stream) As T ' Laster inn objektet fra strømmen With New Formatters.Binary.BinaryFormatter LoadObject = DirectCast(.Deserialize(SourceStream), T) SourceStream.Close() End With End Function End Class <Serializable()> _ Public Class ThisRecord Public Value1 As String Public Value2 As Long Public Value3 As Date End Class
HDSoftware Skrevet 9. mars 2007 Forfatter Skrevet 9. mars 2007 WOHOO! Her var det en del greier jeg ikke har sett før som virker interresant. Jeg må studere denne koden inngående før jeg kan kommentere videre. Takker for forslaget Ole
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå