如何用D语言读写二进制文件?在C中将是:


    FILE *fp = fopen("/home/peu/Desktop/bla.bin", "wb");
    char x[4] = "RIFF";

    fwrite(x, sizeof(char), 4, fp);


我在D docs处找到了rawWrite,但是我不知道其用法,我也不知道我的想法。 fread来自C:


T [] rawRead(T)(T [] buffer);


如果未打开文件,则引发异常。否则,调用fread获取文件句柄并抛出错误。

在Windows上,rawRead始终以二进制模式读取。

最佳答案

rawRead和rawWrite的行为应与fread,fwrite完全相同,只是它们是用于照顾参数大小和长度的模板。

例如

 auto stream = File("filename","r+");
 auto outstring = "abcd";
 stream.rawWrite(outstring);
 stream.rewind();
 auto inbytes = new char[4];
 stream.rawRead(inbytes);
 assert(inbytes[3] == outstring[3]);


rawRead是按照fread的形式实现的

 T[] rawRead(T)(T[] buffer)
    {
        enforce(buffer.length, "rawRead must take a non-empty buffer");
        immutable result =
            .fread(buffer.ptr, T.sizeof, buffer.length, p.handle);
        errnoEnforce(!error);
        return result ? buffer[0 .. result] : null;
    }

08-27 13:52