Write struct to file

Ali Çehreli acehreli at yahoo.com
Sat Feb 25 14:01:33 PST 2012


On 02/25/2012 10:33 AM, Andrej Mitrovic wrote:
> Well first I'd recommend not allocating the struct on the heap. Then you can do:
>
> import std.stdio;
>
> struct nagger
> {
>      string name;
>      int age;
>      double weight;
>      string msg;
> }
>
> void main()
> {
>      nagger lal;
>      lal.name   = "name";
>      lal.age    = 23;
>      lal.weight = 108.5;
>      lal.msg    = "msg";
>
>      auto file = File("test.bin", "w");
>      auto writeBytes = fwrite(&lal, byte.sizeof, lal.sizeof, file.getFP());

But there is no way for fwrite to follow name.ptr to also write the 
characters that are in the string, right?

>      file.close();
>
>      nagger dup;
>      file = File("test.bin", "r");
>      auto readBytes = fread(&dup, byte.sizeof, dup.sizeof, file.getFP());
>
>      assert(lal == dup);

That passes because lal.name.ptr and dup.name.ptr have the same value. 
Maybe that wasn't the intention but the data is not really in the file.

> }
>
> This doesn't work for heap-allocated structs.

Ali


More information about the Digitalmars-d-learn mailing list