r/w binary
Joel Christensen
joelcnz at gmail.com
Thu Jun 30 10:28:56 PDT 2011
Yes, portability, I hadn't thought of that.
Shouldn't file.rawWrite((&i)[0..1]); have [0..4]? Or am I missing some
thing?
- Joel
On 30-Jun-11 7:53 PM, Ali Çehreli wrote:
> On Thu, 30 Jun 2011 15:52:59 +1200, Joel Christensen wrote:
>
>> I'm thinking more about handling binary files. With the C version I
>> would write a int for how many letters in the string, then put in the
>> the string along side ([0005][house]). That way I can have any character
>> at all (though I just thinking of char's).
>
> I would still use a portable text format myself.
>
> For binary, you should consider rawWrite() and rawRead(). Here is just a
> start:
>
> import std.stdio;
>
> void main()
> {
> int i = 42;
> auto file = File("deleteme.bin", "w");
> file.rawWrite((&i)[0..1]);
> }
>
> (Aside: The 'b' for binary mode does nothing in POSIX systems; so it's
> not necessary.)
>
> The parameter to rawWrite() above is a nice feature of D: slicing a raw
> pointer produces a safe slice:
>
> http://digitalmars.com/d/2.0/arrays.html
>
> <quote>
> Slicing is not only handy for referring to parts of other arrays, but for
> converting pointers into bounds-checked arrays:
>
> int* p;
> int[] b = p[0..8];
> </quote>
>
> For strings (actually arrays), you would need .length and .ptr properties.
>
> I've never used it but you might want to consider the serialization
> library Orange as well:
>
> http://www.dsource.org/projects/orange
>
> Ali
More information about the Digitalmars-d-learn
mailing list