Hello.

Recently I was working with std.zlib and experienced error. After few hours I realized it was uncompress issue. I've made simple example that shows the issue:

import std.stdio,
       std.zlib,
       std.array,
       std.file,
       std.conv;

void main()
{
    createFile();
    loadFile();
}


void createFile()
{
    auto file = new File("test.txt", "wb");
    scope(exit) file.close;
    auto cpr = new Compress(9);
    string str = "abcdef";

    for(int i = 0; i < 500; i++)
    {
        file.write(cast(string)cpr.compress(str~to!string(i)));
    }
    file.write(cast(string)cpr.flush);
}

void loadFile()
{
    auto file = new File("test.txt", "rb");
    scope(exit) file.close;

    auto target = new File("test2.txt", "wb");
    scope(exit) target.close;

    auto ucpr = new UnCompress();

    // Making chunk size bigger than file size will (dirty)fix it.
    foreach(chunk; file.byChunk(64))
    {
        target.write(cast(string)ucpr.uncompress(chunk));
    }
    target.write(cast(string)ucpr.flush);
}

The code creates file with compressed data, then tries to uncompress it. That's where the issue is. UnCompress.uncompress(src) works only if the src is complete. If I pass half of it, I get exception (data error). I don't know how to fix it except increasing buffer size to incredible high values(some files may be pretty big).

Reply via email to