如何用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 []缓冲区);
如果文件未打开,则抛出异常。否则,为文件句柄调用 fread 并抛出错误。
rawRead始终在Windows上以二进制模式读取。
答案 0 :(得分:7)
rawRead和rawWrite应该像fread,fwrite一样,只是它们是模板来处理参数大小和长度。
e.g。
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;
}
答案 1 :(得分:2)
如果您只想阅读一个大的缓冲区(例如,整数),您可以这样做:
int[] ints = cast(int[]) std.file.read("ints.bin", numInts * int.sizeof);
和
std.file.write("ints.bin", ints);
当然,如果您有更多结构化数据,那么Scott Wales的回答更合适。