🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
5 messages
5 total messages Started by Johan Sun, 07 Dec 2003 22:21
struct als buffer (c#)
#3457
Author: Johan
Date: Sun, 07 Dec 2003 22:21
15 lines
1585 bytes
hey iedereen,

iedereen weet (c/c++ programmeur) dat je data van een bestand rechtstreeks
in een struct kan laden. dus een struct als een buffer gebruiken.

weet iemand hoe ik dit kan klaarspelen in c#?
ik gebruik een filestream met daarrond een binaryreader,
maar de .read methode van binaryreader verwacht een byte[] buffer. casten
help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan
geconverteerd worden naar byte [].

iemand die me kan helpen??

alvast bedankt,
johan
Re: struct als buffer (c#)
#3458
Author: Pieter Philippaerts
Date: Mon, 08 Dec 2003 06:57
23 lines
2196 bytes
"Johan" <jvm.jr@pandora.be> wrote in message
> iedereen weet (c/c++ programmeur) dat je data van een bestand rechtstreeks
> in een struct kan laden. dus een struct als een buffer gebruiken.

Je moet eerst het bestand inlezen als een byte[] array en dan kan je die
byte[] omzetten naar een structure door middel van deserializatie.
Je moet de BinaryFormatter klasse eens bekijken; die doet zowel serializatie
als deserializatie van structs/objecten.

> ik gebruik een filestream met daarrond een binaryreader,

Een BinaryReader is geschikt om simpeledata structuren te
serializeren/deserializeren [zoals int, uint, long, string, etc] maar het is
niet geschikt om met structures te werken.

> maar de .read methode van binaryreader verwacht een byte[] buffer. casten
> help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan
> geconverteerd worden naar byte [].

C# is type-safe, dus zo'n dingen gaan niet werken.

Mvg,
Pieter Philippaerts
Re: struct als buffer (c#)
#3459
Author: Johan
Date: Mon, 08 Dec 2003 08:45
37 lines
2319 bytes
"Pieter Philippaerts" <Pieter@nospam.mentalis.org> schreef in bericht
news:1070866663.995167@seven.kulnet.kuleuven.ac.be...
> "Johan" <jvm.jr@pandora.be> wrote in message
> > iedereen weet (c/c++ programmeur) dat je data van een bestand
rechtstreeks
> > in een struct kan laden. dus een struct als een buffer gebruiken.
>
> Je moet eerst het bestand inlezen als een byte[] array en dan kan je die
> byte[] omzetten naar een structure door middel van deserializatie.
> Je moet de BinaryFormatter klasse eens bekijken; die doet zowel
serializatie
> als deserializatie van structs/objecten.
>
> > ik gebruik een filestream met daarrond een binaryreader,
>
> Een BinaryReader is geschikt om simpeledata structuren te
> serializeren/deserializeren [zoals int, uint, long, string, etc] maar het
is
> niet geschikt om met structures te werken.
>
> > maar de .read methode van binaryreader verwacht een byte[] buffer.
casten
> > help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan
> > geconverteerd worden naar byte [].
>
> C# is type-safe, dus zo'n dingen gaan niet werken.
>
> Mvg,
> Pieter Philippaerts
>
>

bedankt voor jouw reactie :-)
nu heb ik weer stof om na te denken...

groeten johan
Re: struct als buffer (c#)
#3461
Author: Luc Kumps
Date: Mon, 08 Dec 2003 09:44
54 lines
2898 bytes
Johan wrote:
> hey iedereen,
>
> iedereen weet (c/c++ programmeur) dat je data van een bestand
> rechtstreeks in een struct kan laden. dus een struct als een buffer
> gebruiken.
>
> weet iemand hoe ik dit kan klaarspelen in c#?
> ik gebruik een filestream met daarrond een binaryreader,
> maar de .read methode van binaryreader verwacht een byte[] buffer.
> casten help niet, dan krijg ik foutmeldingen omdat "struct test" niet
> kan geconverteerd worden naar byte [].

Je zou eens een blik kunnen werpen op XmlSerializer.

Stel, je hebt een class Settings als volgt:

 public class Settings
 {
  public int a,b,c,d;
  public byte [] data;
  public string s;
};

En je hebt
  Settings s;

Dan kun je s wegschrijven in een bestand "Config.Xml" m.b.v.
//OPGEPAST - NIET GETESTE CODE
    StreamWriter myWriter =new StreamWriter("Config.Xml",false);
    XmlSerializer mySerializer =new XmlSerializer(typeof(Settings));
     mySerializer.Serialize(myWriter, s);

Inlezen gaat dan met:
//OPGEPAST - NIET GETESTE CODE
    FileInfo fi = new FileInfo("Config.Xml");
    if(fi.Exists)  {
       FileStream myFileStream = fi.OpenRead();
      XmlSerializer mySerializer = new XmlSerializer(typeof(Settings));
       s = (OurSettings)mySerializer.Deserialize( myFileStream);
    }


Alle error handling moet natuurlijk nog toegevoegd worden, en een Close van
de FileStream ook...

Voordeel is dat je eender welke Xml Viewer (bv. Internet Explorer) kunt
gebruiken om je gegevens te bekijken.
Nadeel is dat alles tussen text en binary moet worden geconverteerd. Maar
voor 1 miezerige struct kan dat geen bezwaar zijn. Als je echter een paar
miljoen van deze structs moet schrijven/lezen kun je misschien beter naar
wat anders uitkijken...

Luc K
struct als buffer (c#)
#3462
Author: Johan
Date: Mon, 08 Dec 2003 10:48
5 lines
1219 bytes
wel, ik kan zonder problemen inlezen in een byte[] array, serializen, maar
deserializeren gaat dan ook enkel maar naar een byte[] array. als ik iets
anders gebruik krijg ik een invalidcastexception...

groeten johan
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads