Zum Hauptinhalt springen

DrvFlushFile

Das Ereignis wird ausgelöst, wenn die Datei aus dem Festplattencache auf das Laufwerk geschrieben wird. Die Datei bleibt weiterhin geöffnet. Das Schließen der Datei erfolgt in DrvCloseFile. Im Datenpaket befinden sich folgende Informationen:

  • ItemAuthUserDomain

    Hier wird der beim Betriebssystem angemeldete Benutzer und die Domäne, in der er angemeldet ist, übergeben.

  • ItemFilePath

    Der Pfad und Dateiname der Datei. Der Pfad wird ohne den Laufwerksbuchstaben angegeben.

  • ItemFileCustom

    Wurden für die Datei benutzerdefinierte Daten angegeben, befinden sich diese in diesem Bereich.

  • ItemFileAttributes

    Der Wert in dem Bereich FileAttributes kann mit folgenden Konstanten verglichen werden:

  • ItemFileTime

    In diesem Bereich befinden sich das Datum und die Uhrzeit für die Erstellung (CreationTime), den letzten Zugriff (LastAccessTime) und die letzte Änderung (LastWriteTime) der Datei. Der Wert wird als Zeitstempel angegeben, dieser kann mit folgender Anweisung gelesen werden:

    tDrvMsxRead->MsxRead(_MsxData, tTimeStamp);
    tCalTime # CnvCB(tTimeStamp);
  • ItemFileContentDisk

    Der Inhalt der Datei wird in einem temporären Verzeichnis gespeichert. Das Verzeichnis und der Dateiname dieser Datei befinden sich in FilePath. Die Datei darf in dem Pfad nicht gelöscht oder geändert werden. Die Werte der Datei (Hash, Dateigröße,...) müssen in dem Antwortpaket übertragen werden.

  • Response

  • MessageId

    • _DrvResFlushFile
    • Id der Antwort
  • ItemHeader

    • _DrvItemHeader
    • Kopf des Datenpakets
  • ProtocolId

    • 0xF3A49E52
    • Id des verwendeten Protokolls
  • ProtocolVersion

    • 0x00040000
    • Version des verwendeten Protokolls
  • ItemFileCustom

  • Custom01

    • alpha
    • Benutzerdefinierte Informationen
  • ItemFileHash

  • FileHash

    • alpha
    • Hash der gespeicherten Datei
  • ItemFileSize

  • FileSize

    • bigint
    • Größe der Datei (in Bytes)
  • ItemFileAttributes

  • FileAttributes

    • int
    • Dateiattribute
  • ItemFileTime

  • CreationTime

    • bigint
    • Zeitstempel der Erzeugung der Datei
  • LastAccessTime

    • bigint
    • Zeitstempel des letzten Zugriffs
  • LastWriteTime

    • bigint
    • Zeitstempel der letzten Änderung
  • ItemFileAuthorisation

  • UserId

    • int
    • Zugriffs-Id
  • Authorisation

    • int
    • Berechtigungen
  • ItemResult

  • Result

    • int
    • Ergebniswert

Der Bereich ItemFileCustom ist optional. Die benutzerdefinierten Informationen werden nur dann geändert, wenn dieser Bereich im Antwortdatenpaket enthalten ist. Zum Löschen der benutzerdefinierten Daten muss ein Leerstring angegeben werden.

Die Datei wird nur dann geschrieben, wenn in Result _ErrOk (0) angegeben wird. Durch das Setzen eines _ErrFsi...-Wertes können andere Fehlerzustände übermittelt werden.

Beispiel:

if (tDrvRequestMessageId = _DrvReqFlushFile)
{
tDrvMsxWrite # MsxOpen(_MsxSocket | _MsxWrite, tSck);

tDrvMsxWrite->MsxWrite(_MsxMessage, _DrvResFlushFile);
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemHeader); // ItemHeader
tDrvMsxWrite->MsxWrite(_MsxData, 0xF3A49E52); // ProtocolId
tDrvMsxWrite->MsxWrite(_MsxData, 0x00040000); // ProtocolVersion

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileCustom);
tDrvMsxWrite->MsxWrite(_MsxData, ''); // no custom data

tHash # StrCnv(StrCnv(FsiFileInfo(tRequestContentDiskFilePath, _FsiFileRMD160), _StrToUTF8), _StrFromANSI);
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileHash); // set hash
tDrvMsxWrite->MsxWrite(_MsxData, tHash);
// File size
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileSize); // set file size
tDrvMsxWrite->MsxWrite(_MsxData, tImportedFile->FsiSize64());

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAttributes); // set same attributes
tDrvMsxWrite->MsxWrite(_MsxData, tRequestFileAttributes);

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileTime); // set file time
tDrvMsxWrite->MsxWrite(_MsxData, tRequestFileCreationTime);
tCalSystemTime->vmSystemTime();
tDrvMsxWrite->MsxWrite(_MsxData, CnvBC(tCalSystemTime));
tDrvMsxWrite->MsxWrite(_MsxData, CnvBC(tCalSystemTime));

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAuthorisation); // user authorisation for admins
tDrvMsxWrite->MsxWrite(_MsxData, 10);
tDrvMsxWrite->MsxWrite(_MsxData, _DrvAuthAll); // all rights

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAuthorisation); // user authorisation for everybody else
tDrvMsxWrite->MsxWrite(_MsxData, 12);
tDrvMsxWrite->MsxWrite(_MsxData, _DrvAuthList | _DrvAuthRead); // read only

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemResult); // Write result
tDrvMsxWrite->MsxWrite(_MsxData, _ErrOk);
tDrvMsxWrite->MsxWrite(_MsxEnd, 0);

tDrvMsxWrite->MsxClose();
}