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

CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiTree / Zusatzfunktionen /

ReorganizeTo - Teilbaum reorganisieren

[C++] CxiError CxiTree :: ReorganizeTo (const char *target, const char *keyword, short options)
[C] CxiError cxiReorganize (CxiHandle self, const char *target, const char *keyword, short options)

[S2:STANDARD] Schreibt einen kompletten Teilbaum als CxiTreeFile-Datei

target:
Name der Zieldatei

keyword:
Schlüsselwort für Zieldatei, 0 für unverschlüsselte Datei

options:
Optionen: - 0 für Standarddatei, - cxiOptPacked für gepackte Datei

return:
0 ok, sonst Fehler

ReorganizeTo arbeitet ähnlich wie CopySubTree, jedoch wird als Ziel eine Datei erstellt. Diese Datei enthält keine verlorenen Bereiche. Solche Bereiche entstehen, wenn ein Knoten seine ursprüngliche Größe überschreitet, so dass er innerhalb der Datei verschoben werden muss. Wird cxiOptPacked angegeben, folgen alle Knoten direkt ohne Reservebytes aufeinander; andernfalls werden alle Größen auf ein Vielfaches der Blockgröße (meistens 256 Byte) aufgerundet. cxiOptPacked sollte nur verwendet werden, wenn die erstellte Datei nur zum Lesen vorgesehen ist.

Portabilität:
Diese Funktion ist in allen unterstützten Systemen verfügbar.

Siehe auch:
CopySubTree...

Beispiel:

// *** Datei CXIREORG.CPP ***

// CXIREORG benutzt die Funktion ReorganizeTo, um eine
// CXI-Datei zu reorganisieren. Dabei kann die Quelldatei
// uncodiert sein (Parameter <keyword> nicht angegeben)
// oder eine verschlüsselte Datei sein (Parameter
// <keyword> muß angegeben werden).
// Durch Hinzufügen von /C wird die Quelldatei uncodiert
// gelesen und die Zieldatei codiert erstellt.
// Mit /P wird eine gepackte Zieldatei erstellt.

// Dieses Beispielprogramm ist als CXIREORG.EXE allgemein
// verfügbar.

#include <stdio.h>
#include "cxi.h"

#define CXIREORGVERSION "2.04"

static int usage (void)
{
  printf ("\nUsage:  CXIREORG <sourcefile> <targetfile>"
          " [\"<keyword>\"] [/P] [/C]\n");
  return 1;
}

int main (int argc, char **argv)
{
  const char *source = 0;
  const char *target = 0;
  const char *kword = 0;
  int rpw = 1;
  CxiError rc;
  CxiShort options = 0;
  int i;

  printf ("\nCXIREORG - CXI File Reorganizer - Version "
          CXIREORGVERSION "\n");

  // Parameter auswerten
  for (i=1; i<argc; i++)
  {
    const char *argvi = argv [i];
    if (*argvi == '/' || *argvi == '-')
    {
      // Option
      argvi++;
      switch (*argvi & 0xDF)
      {
        case 'P':       // /P  Pack (für Readonly-Datei)
          options |= cxiOptPacked;
          break;
        case 'C':       // /C  Crypt
          rpw = 0;
          break;
        default:
          return usage ();
      }
    }
    else if (!source)   // Dateiname 1
      source = argvi;
    else if (!target)   // Dateiname 2
      target = argvi;
    else if (!kword)    // Schlüssel
      kword = argvi;
    else
      return usage ();
  }

  // Parameterüberprüfung
  if (source == 0 || target == 0)
    return usage ();

  // Quelldatei öffnen
  CxiTreeFile rf (source,
                  cxiOptReadOnly | cxiOptNoCreate | cxiOptShadowBuffer,
                  rpw ? kword : 0);
  if (rf.Status())
  {
    printf ("\n%s(%d) opening source file \"%s\"\n",
            cxiQueryErrorName (rf.Status()),
            rf.Status(), source);
    return 2;
  }
  rf.EnableFileCache (16);

  // Reorganisation durchführen
  printf ("\nReorganizing \"%s\"", source);
  printf (" to \"%s\"\n", target);
  rc = rf.ReorganizeTo (target, kword, options);
  if (rc)
  {
    printf ("\n%s(%d) during reorganization\n",
            cxiQueryErrorName (rc), rc);
    return 3;
  }

  // Fertig
  printf ("\nSuccess.\n");
  return 0;
}

// *** Ende CXIREORG.CPP ***


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

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