Zum Hauptinhalt springen

FsiWrite

obj -> FsiWrite(var1[, int2]) : int

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

Dateibereich schreiben

Details

Mit dieser Funktion werden Daten in die externe Datei (obj) ab der aktuellen Positon geschrieben (siehe FsiSeek ()). In (var1) kann ein Datenbankfeld, eine Variable, ein Array oder eine Zeichenketten-Konstante angegeben werden. Arrays aus Alphafeldern sind dabei nicht zulässig. Sofern (int2) nicht angegeben ist, wird die der Größe der Variablen (var1) entsprechende Anzahl von Bytes geschrieben. Der Wert in (int2) kann daher auch nicht größer als die Variable selbst sein.

Leerzeichen am Ende eines Alphawerts bleiben erhalten. Für die Erstellung von ASCII-Dateien muss ausschließlich mit alphanumerischen Werten gearbeitet werden. Andere Feldtypen müssen in der Prozedur entsprechend umgewandelt werden.

Beim Schreiben werden die Zeichenketten standardmäßig von der internen Zeichencodierung in die OEM-Zeichencodierung gewandelt. Durch entsprechende Angaben bei der Anweisung FsiOpen () kann eine andere Wandlung vorgenommen oder die Wandlung verhindert werden.

Sollen in eine externe Datei Nullen geschrieben werden, kann dafür keine Zeichenkette verwendet werden. Statt dessen kann zum Beispiel ein Array vom Typ byte verwendet werden. Da immer das gesamte Array geschrieben wird, werden auch die auf Null gesetzten Zellen geschrieben.

Das Resultat gibt die Anzahl der geschrieben Bytes zurück. Ist das Resultat negativ ist ein Fehler aufgetreten und das Resultat enthält den Fehlerwert (_ErrFsi...). Der Fehlerwert des Betriebssystems kann über die Eigenschaft FsiError abgefragt werden.

Beispiel:

// Kopieren einer Datei
define
{
sMem : _Mem8K // 8 Kilobytes
}

sub FsiCopy
(
aSrcName : alpha; // Name der Ausgangsdatei
aDstName : alpha; // Name der Zieldatei
aMove : logic; // Originaldatei löschen
) : int; // Fehlerwert

local
{
tSrcHdl : int; // Deskriptor der Ausgangsdatei
tDstHdl : int; // Deskriptor der Zieldatei
tSize : int; // Größe der Originaldatei
tBlockSize : int; // Blockgröße
tBuffer : byte[sMem]; // Datenpuffer
tResult : int; // Funktionsresultat
}

{
try
{
// Dateien öffnen und Größe ermitteln
tSrcHdl # FsiOpen(aSrcName, _FsiStdRead);
tDstHdl # FsiOpen(aDstName, _FsiStdWrite);
tSize # FsiSize(tSrcHdl);

// kopieren
while (tSize > 0)
{
tBlockSize # Min(tSize, sMem); // maximale Blockgröße setzen
tSrcHdl->FsiRead(tBuffer, tBlockSize); // Daten lesen
tDstHdl->FsiWrite(tBuffer, tBlockSize); // Daten schreiben
Dec(tSize, tBlockSize); // Restgröße vermindern
}

// Datum & Uhrzeit wiederherstellen
tDstHdl->FsiDate(_FsiDtModified, FsiDate(tSrcHdl, _FsiDtModified));
tDstHdl->FsiTime(_FsiDtModified, FsiTime(tSrcHdl, _FsiDtModified));
}

// Fehler aufgetreten?
tResult # ErrGet();
ErrSet(0);

// Dateien schließen, wenn Handles belegt
if (tDstHdl > 0)
tDstHdl->FsiClose();
if (tSrcHdl > 0)
tSrcHdl->FsiClose();

// Originaldatei löschen
if (aMove)
tResult # FsiDelete(aSrcName);

return(tResult);
}

Mögliche Laufzeitfehler: