Io 二进制文件I/O
如何读写D语言中的二进制文件?在C中是: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
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);