Tôi có một tập tin nhị phân mà thực sự là một chồng các tập tin, định dạng là:Làm thế nào để tôi đọc một BufferedFile sử dụng bộ đệm đọc (ubyte []) khi độ dài bộ đệm được đặt ở thời gian chạy?
lengh_of_subfile,subfile
length_of_subfile
là một 64-bit số nguyên. Tôi có thể đọc các long
không có vấn đề nhưng khi tôi cố gắng tạo ra một bộ đệm cho các subfile tôi nhận được lỗi biên dịch nói rằng nó không thể được đọc tại thời gian biên dịch. Tôi đang thiếu gì? Tôi đã viết một công cụ khai thác giống hệt nhau trong erlang, PHP và C# ... D là ném tôi cho một vòng lặp.
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++;
}
}
Bạn cần một [mảng động] (http: // stackoverflow.com/questions/8363728/d-dynamic-array-initialization-stride-and-the-index-operation). (Tôi không có ý tưởng làm thế nào, mặc dù, bởi vì tôi không lập trình trong D) – Ryan