Io 二进制文件I/O

Io 二进制文件I/O,io,d,Io,D,如何读写D语言中的二进制文件?在C中是: FILE *fp = fopen("/home/peu/Desktop/bla.bin", "wb"); char x[4] = "RIFF"; fwrite(x, sizeof(char), 4, fp); 我在D找到了Rawrite,但我不知道它的用法,也不知道我的想法fread来自C: T[]rawRead(T)(T[]buffer) 如果文件未打开,则引发异常。否则,调用文件句柄的fread并抛出错误 在Window

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


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

    fwrite(x, sizeof(char), 4, fp);
我在D找到了Rawrite,但我不知道它的用法,也不知道我的想法
fread
来自C:

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

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

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


rawRead和rawrite的行为应该与fread、fwrite完全相同,只是它们是处理参数大小和长度的模板

e、 g

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;
    }

如果您只想在一个大的值缓冲区(比如ints)中读取,只需执行以下操作:

int[] ints = cast(int[]) std.file.read("ints.bin", numInts * int.sizeof);


当然,如果您有更多结构化数据,那么Scott Wales的答案更合适。

如果您的数据已经在内存中(从api调用接收),而不是在磁盘上,该怎么办?流api不支持rawRead,并且没有要传递给.fread的文件句柄。。。
int[] ints = cast(int[]) std.file.read("ints.bin", numInts * int.sizeof);
std.file.write("ints.bin", ints);