CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiTree / Ableitung CxiTreeFile /
CxiError CopyBor (CxiTreeFile& trgcxi, CxiName trgname, const CxiTreeFile& srccxi, CxiName srcname = 0)
CxiError cxiCopyBor (CxiHandle trgcxi, CxiName trgname, CxiHandle srccxi, CxiName srcname)
trgcxi:
CxiTreeFile, der das Zielobjekt aufnehmen soll
trgname:
Name des Zielobjekts
srccxi:
CxiTreeFile, der das Quellobjekt enthält
srcname:
Name des Quellobjekts, einer existierenden cxiTypeBor-Variablen. Bei Angabe von NULL wird srcname==trgname angenommen.
return:
0 ok, sonst Fehler
Existiert das Zielobjekt nicht, wird es mit der gleichen Größe wie das Quellobjekt automatisch angelegt.
Zum Kopieren von Variablen steht auch die allgemeinere Funktion CopyVar zur Verfügung. Im Gegensatz zu CopyVar ersetzt CopyBor eine bestehende Zielvariable nicht, sondern überschreibt sie byteweise. Ist also die Quellvariable kleiner als die Zielvariable, so bleiben die restlichen Bytes unverändert erhalten; dies ist bei CopyVar nicht der Fall. Ist die Quellvariable größer als die Zielvariable, dann werden so viele Bytes wie möglich kopiert und danach ein Fehler gemeldet.
Portabilität:
Diese Funktion ist in allen unterstützten Systemen verfügbar.
Siehe auch:
CxiTreeFile(...)
NewBor - Erstellen eines Binärobjekts
ReadBor - Lesen eines Binärobjekts
WriteBor - Schreiben eines Binärobjekts
Beispiel:
Als Beispiel für die Verwendung von Binärobjektreferenzen ist die Implementation der Funktion cxiCopyBor angegeben:
#include "cxib.h"
CxiError CXIGLOBALFUNC cxiCopyBor (CxiHandle trghdl,
CxiName trgname,
CxiHandle srchdl,
CxiName srcname)
{
// Lokale Variablen
char buffer [256];
CxiType srctype, trgtype;
CxiInt rw;
CxiLong pos = 0;
CxiError rc;
// Vorgabe für srcname ist trgname
if (srcname == 0)
srcname = trgname;
// Angabe für Quelle prüfen
srctype = cxiQueryVarType (srchdl, srcname);
if (srctype != cxiTypeBor)
return cxiErrorBorCopySource;
// Ziel prüfen, ggf. anlegen
trgtype = cxiQueryVarType (trghdl, trgname);
if (trgtype != cxiTypeBor)
{
rc = cxiNewBor (trghdl, trgname,
cxiQueryVarSize (srchdl, srcname), 0);
if (rc)
return rc;
}
// Kopieren der Daten
while ((rw = (CxiInt) cxiReadBor (srchdl, srcname,
buffer, sizeof buffer, pos)) != 0)
{
if (cxiWriteBor (trghdl, trgname, buffer, rw, pos) != rw)
return cxiErrorBorCopyWrite;
pos += rw;
}
// ok
return cxiNoError;
}