二进制文件I / O.

时间:2010-10-05 02:54:35

标签: io d

如何用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上以二进制模式读取。

  

2 个答案:

答案 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的回答更合适。