updf_copy_to

updf_copy_to kopiert die Streams, Storages und Properties eines Storages rekursiv in einen anderen Storage.

ret = updf_copy_to(stg, stgDest)

Returnwert

ret ist entweder die Zahl 1 oder ein Error-Objekt, wenn ein Fehler aufgetreten ist (siehe error_create).

Parameter

stg

stg ist ein Storage-Objekt (siehe updf_create_file, updf_open_file, updf_create_storage).

stgDest

stgDest ist der Ziel-Storage.

Beispiel

def test_updf_copy_to()
{
    ssFile = create_test_file();
    ssRoot = GetTempPath();

    stg = updf_open_file(ssFile);
    updf_dump(stg, ssRoot + "test-dump");
    stg = stgDest = 0; gc()

    stg = updf_open_file(ssFile);
    if (type(stg) == "error") error();

    stgDest = updf_create_file(ssFile + "-2");
    if (type(stgDest) == "error") error();

    rc = updf_copy_to(stg, stgDest);
    if (type(rc) == "error") error();

    rc = updf_dump(stg, ssFile + ".1", 0x100);
    rc = updf_dump(stgDest, ssFile + ".2", 0x100);

    _check_updf(ssFile);
    _cleanup_updf(ssFile);

    stg = stgDest = 0; gc()
}

def create_test_file()
{
    ssRoot = GetTempPath();
    ssFile = ssRoot + "test-copy-to-updf.updf";
    stg = updf_create_file(ssFile);

    f = updf_create_stream(stg, "stream1");
    fwrite_char(f, "test1");
    fclose(f);

    props = updf_prop_open(stg, "stream1")
    updf_prop_set_at(props, "1", updf_propval_new(1));
    updf_prop_set_at(props, "2", updf_propval_new(2));
    updf_prop_set_at(props, "3", updf_propval_new(3));
    updf_prop_close(props);

    f = updf_create_stream(stg, "stream2");
    fwrite_char(f, "test2");
    fclose(f);

    stg1 = updf_create_storage(stg, "stg1", 0);
    f = updf_create_stream(stg1, "stream11");
    fwrite_char(f, "test11");
    fclose(f);
    f = updf_create_stream(stg1, "stream21");
    fwrite_char(f, "test21");
    fclose(f);

    updf_close_storage(stg1)
    updf_close_storage(stg)
    return ssFile;
}

def _cleanup_updf(ssFile)
{
    DeleteFile(ssFile + ".1\\" + "stream1");
    DeleteFile(ssFile + ".1\\" + "stream1._props_");
    DeleteFile(ssFile + ".1\\" + "stream2");
    DeleteFile(ssFile + ".1\\" + "stg1\\stream11");
    DeleteFile(ssFile + ".1\\" + "stg1\\stream21");
    RemoveDirectory(ssFile + ".1\\" + "stg1");
    RemoveDirectory(ssFile + ".1");

    DeleteFile(ssFile + ".2\\" + "stream1");
    DeleteFile(ssFile + ".2\\" + "stream1._props_");
    DeleteFile(ssFile + ".2\\" + "stream2");
    DeleteFile(ssFile + ".2\\" + "stg1\\stream11");
    DeleteFile(ssFile + ".2\\" + "stg1\\stream21");
    RemoveDirectory(ssFile + ".2\\" + "stg1");
    RemoveDirectory(ssFile + ".2");

    DeleteFile(ssFile);
    DeleteFile(ssFile + "-2");
}

def _check_updf(ssFile)
{
    s1 = text_file_read(ssFile + ".1\\" + "stream1")
    s2 = text_file_read(ssFile + ".2\\" + "stream1")
    if (s1 != s2) {
        error();
    }

    s1 = text_file_read(ssFile + ".1\\" + "stream1._props_")
    s2 = text_file_read(ssFile + ".2\\" + "stream1._props_")
    if (s1 != s2) {
        error();
    }

    s1 = text_file_read(ssFile + ".1\\" + "stream2")
    s2 = text_file_read(ssFile + ".2\\" + "stream2")
    if (s1 != s2) {
        error();
    }

    s1 = text_file_read(ssFile + ".1\\" + "stg1\\stream11")
    s2 = text_file_read(ssFile + ".2\\" + "stg1\\stream11")
    if (s1 != s2) {
        error();
    }

    s1 = text_file_read(ssFile + ".1\\" + "stg1\\stream21")
    s2 = text_file_read(ssFile + ".2\\" + "stg1\\stream21")
    if (s1 != s2) {
        error();
    }
}

test_updf_copy_to();

History

Version Beschreibung
5.6.0 Neu

id-1380051