如何在D中逐字节读取文件?
我所拥有的是一个打开的文件,说:
auto f = File("test.bin");
现在我需要读取字节,说:
ubyte first = fgetc(f); // this is whishfull thinking
ubyte second = fgetc(f);
我还需要能够做其他的事情,比如阅读uints,ushorts,skipping(fseek)等等(例如C再次):
fread(&third,2,1,fptr);
奖金问题是,如果有可能一次性阅读一个结构,说我有
struct Test { ubyte a,b,c; uint d,e; /* etc */ }
我可以从二进制文件中读取它吗?
2 回答
Phobos为此提供了出色的byChunk功能 .
你真的不想逐个字节地读取文件,而是想要读取块,最好是一个与页面大小相同的块(通常是4 KiB) .
您可以编写自己的
fgetc
函数,将File
对象上的rawRead
写入缓冲区,然后返回缓冲区中的下一个可用元素 .另一种方法是使用
core.stdc.stdio
模块并执行C风格的文件I / O:至于阅读结构,也可以用
rawRead
来完成 . 例如: