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:
-
ItemAuthUserDomainHier wird der beim Betriebssystem angemeldete Benutzer und die Domäne, in der er angemeldet ist, übergeben.
-
ItemFilePathDer Pfad und Dateiname der Datei. Der Pfad wird ohne den Laufwerksbuchstaben angegeben.
-
ItemFileCustomWurden für die Datei benutzerdefinierte Daten angegeben, befinden sich diese in diesem Bereich.
-
ItemFileAttributesDer Wert in dem Bereich
FileAttributeskann mit folgenden Konstanten verglichen werden:_FsiAttrHidden: Versteckte Datei_FsiAttrSystem: Systemdatei_FsiAttrDir: Verzeichnis_FsiAttrArchive: Archivdatei
-
ItemFileTimeIn 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); -
ItemFileContentDiskDer 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
-
ProtocolId0xF3A49E52- Id des verwendeten Protokolls
-
ProtocolVersion0x00040000- Version des verwendeten Protokolls
-
ItemFileCustom_DrvItemFileCustom- Informationsbereich für benutzerdefinierte Daten
-
Custom01alpha- Benutzerdefinierte Informationen
-
ItemFileHash_DrvItemFileHash- Informationsbereich der Prüfsumme
-
FileHashalpha- Hash der gespeicherten Datei
-
ItemFileSize_DrvItemFileSize- Informationsbereich der Dateigröße
-
FileSizebigint- Größe der Datei (in Bytes)
-
ItemFileAttributes_DrvItemFileAttributes- Informationsbereich für Dateiattribute
-
FileAttributesint- Dateiattribute
-
ItemFileTime_DrvItemFileTime- Informationsbereich für Dateidatum und -uhrzeit
-
CreationTimebigint- Zeitstempel der Erzeugung der Datei
-
LastAccessTimebigint- Zeitstempel des letzten Zugriffs
-
LastWriteTimebigint- Zeitstempel der letzten Änderung
-
ItemFileAuthorisation_DrvItemFileAuthorisation- Informationsbereich für Berechtigungen
-
UserIdint- Zugriffs-Id
-
Authorisationint- Berechtigungen
-
ItemResult_DrvItemResult- Ergebnis-Bereich
-
Resultint- 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();
}