二进制文件I/O.

Ped*_*rda 9 io d

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


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

    fwrite(x, sizeof(char), 4, fp);
Run Code Online (Sandbox Code Playgroud)

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

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

如果文件未打开,则抛出异常.否则,为文件句柄调用fread并抛出错误.

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

Sco*_*les 7

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]);
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)