int main(int argc, char *argv[])
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: %s <in file> <out file>\n", argv[0]);
        return -1;
    }

    try
    {
        FileInputStream iStream(argv[1]);
        FileOutputStream oStream(argv[2]);
        StringStream sStream;

        iStream.streamTo(sStream);
        sStream.streamTo(oStream);

        iStream.close();
        oStream.close();
    }
    catch (Throwable& t)
    {
        cerr << "Caught throwable: " << t.toString() << endl;
    }

    catch (...)
    {
        cerr << "Caught unknown exception" << endl;
    }
    return 0;
}