Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiTree / Ableitung CxiTreeFile /

CopyBor - Kopieren eines Binärobjekts

[C++] CxiError CopyBor (CxiTreeFile& trgcxi, CxiName trgname, const CxiTreeFile& srccxi, CxiName srcname = 0)
[C] CxiError cxiCopyBor (CxiHandle trgcxi, CxiName trgname, CxiHandle srccxi, CxiName srcname)

[S3:SPEZIAL] Kopiert ein Binärobjekt

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;
}


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 277 von 855, Thema 8334 (CopyBor)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>