Avatar billede swamboo Seniormester
17. februar 2008 - 21:06 Der er 9 kommentarer og
1 løsning

Save og loade til struct.

Hejsa. 

Jeg fik lavet en struct:
        public struct PrintEditControl
        {
            public int DistrictNr;
            public DateTime EditDate;
            public DateTime PrintDate;

Nu vil jeg så gerne gemme og hente denne struct i en txt fil (eller noget bedre?) og jeg har forsøgt at bruge den samme metode som jeg plejer at bruge på min pda - men uha - det virker slet ikke på pc.

Er der ikke en der kan give mig en brugbar løsning, som ikke er for kompliceret.

(Hvis du ønsker at se det jeg har forsøgt at bikse sammen sender jeg gerne det - men jeg tvivler det vil hjælpe)

På forhånd tak!!!
Avatar billede arne_v Ekspert
17. februar 2008 - 23:09 #1
Du kan serialisere binært.

Du kan serialisere til XML.

Du kan gemme i et custom text format.

Dit valg.
Avatar billede arne_v Ekspert
17. februar 2008 - 23:10 #2
public class Ser<T>
    {
        public static byte[] Object2ByteArray(T o)
        {
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, o);
            return ms.ToArray();
        }
        public static string Object2String(T o)
        {
            return Convert.ToBase64String(Object2ByteArray(o));
        }
        public static T ByteArray2Object(byte[] b)
        {
            MemoryStream ms = new MemoryStream(b);
            BinaryFormatter bf = new BinaryFormatter();
            ms.Position = 0;
            return (T)bf.Deserialize(ms);
        }
        public static T String2Object(string s)
        {
            return ByteArray2Object(Convert.FromBase64String(s));
        }
    }
Avatar billede arne_v Ekspert
17. februar 2008 - 23:11 #3
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace E
{
    public class Data1
    {
        private string s;
        public String S
        {
            get
            {
                return s;
            }
            set
            {
                s = value;
            }
        }
    }
    public class Data2 : IXmlSerializable
    {
        private string s;
        public String S
        {
            get
            {
                return s;
            }
            set
            {
                s = value;
            }
        }
        public XmlSchema GetSchema()
        {
            return null;   
        }
        public void ReadXml(XmlReader rdr)
        {
            s = rdr.ReadElementString();
        }
        public void WriteXml(XmlWriter wrt)
        {
            wrt.WriteStartElement("S");
            wrt.WriteCData(s);
            wrt.WriteEndElement();
        }
    }
    public class TestClass
    {
        public static void Main(string[] args)
        {
            // standard
            Data1 d1 = new Data1();
            d1.S = "<tag>text</tag>";
            Console.WriteLine(d1.S);
            XmlSerializer ser1 = new XmlSerializer(typeof(Data1));
            StringWriter sw1 = new StringWriter();
            ser1.Serialize(sw1, d1);
            String s1 = sw1.ToString();
            Console.WriteLine(s1);
            StringReader sr1 = new StringReader(s1);
            Data1 d1x = (Data1)ser1.Deserialize(sr1);
            Console.WriteLine(d1x.S);
            // custom
            Data2 d2 = new Data2();
            d2.S = "<tag>text</tag>";
            Console.WriteLine(d2.S);
            XmlSerializer ser2 = new XmlSerializer(typeof(Data2));
            StringWriter sw2 = new StringWriter();
            ser2.Serialize(sw2, d2);
            String s2 = sw2.ToString();
            Console.WriteLine(s2);
            StringReader sr2 = new StringReader(s2);
            Data2 d2x = (Data2)ser2.Deserialize(sr2);
            Console.WriteLine(d2x.S);
        }
    }
}
Avatar billede arne_v Ekspert
17. februar 2008 - 23:11 #4
et par kode stumper fra lageret
Avatar billede swamboo Seniormester
18. februar 2008 - 07:57 #5
Det ser godt nok fornemt ud, men som du sikkert kan gætte fatter jeg ikke meget af det "du" foretager dig.
Kan du evt. give lidt forklaring, så jeg kan editere koden til mit lille projekt.
(jeg havde jo "bare" regnet med lidt streamwriter, men hvis jeg kan få ovenstående til at køre er det jo sejt nok!)
Avatar billede arne_v Ekspert
18. februar 2008 - 16:21 #6
Du kan også skrive med en StreamWriter og læse med en StreamReader, hvis du foretrækker det.
Avatar billede swamboo Seniormester
19. februar 2008 - 00:12 #7
Hej igen Arne.

Jeg har forsøgt med din kode, og den skriver rigtig fint en del i et vindue som straks lukkes igen. Men jeg kan ikke finde den fil den gerne skulle generere - såfremt jeg har forstået din kode rigtig... Jeg er ikke helt med på hvad det er den laver.
Avatar billede arne_v Ekspert
24. februar 2008 - 06:39 #8
Koden serialiserer binært til et byte array og XML til en string.

Hvis du erstattet MemorySTream med en FileStream og StringWriter med en StreamWriter,
så vild e skrive til fil.
Avatar billede swamboo Seniormester
03. februar 2010 - 20:58 #9
Takker - send lige et svar :o)
Avatar billede arne_v Ekspert
04. februar 2010 - 20:55 #10
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester