Как прочитать BufferedFile с помощью read(ubyte[] buffer), когда длина буфера задается во время выполнения?

У меня есть двоичный файл, который на самом деле является стеком файлов, формат:

lengh_of_subfile,subfile

length_of_subfile - 64-битное целое число. Я могу прочитать long без проблем, но когда я пытаюсь создать буфер для подфайла, я получаю ошибки компиляции, говорящие, что он не может быть прочитан во время компиляции. Что я упускаю? Я написал идентичный инструмент извлечения на erlang, PHP и C#... D ставит меня в тупик.

void main(string args[]) {
    Stream file = new BufferedFile(args[1], FileMode.In);
    int counter = 0;
    while(file.position < file.size) {
        ulong len;
        file.read(len);
        ubyte[len] ogg;
        file.read(ogg);
        string outname = getcwd() ~ "/" ~ to!string(counter) ~ ".ogg";
        Stream oggout = new BufferedFile(outname, FileMode.OutNew);
        oggout.write(ogg);
        writefln("Creating file " ~ to!string(counter) ~ ".ogg");
        counter++;
    }   
}
6
задан Ry- 31 December 2011 в 21:58
поделиться