Zum Hauptinhalt springen

DrvGetFileInfo

Dieses Ereignis wird aufgerufen, wenn Informationen zu einer Datei angefragt werden oder die Informationen von dem Ereignis DrvGetFileEntries zu alt sind. Für das Wurzelverzeichnis des Laufwerks wird dieses Ereignis aufgerufen, um die Berechtigungen für das Anlegen von Ordnern und Dateien zu ermitteln. Der beim Betriebssystem angemeldete Benutzer (ItemAuthUserDomain) und der Name der angeforderten Datei bzw. des Ordners (FilePath) werden in dem Datenpaket angegeben. Wird das Wurzelverzeichnis abgefragt wird hier '\' übergeben.

  • Response
  • MessageId
    • _DrvResGetFileInfo
    • 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
  • ItemFileSize
  • FileSize
    • bigint
    • Größe der Datei (in Bytes)
  • ItemFileAttributes
  • FileAttributes
    • int
    • Dateiattribute
  • ItemFileTime
  • CreationTime
    • bigint
    • Datum und Uhrzeit der Dateierstellung
  • LastAccessTime
    • bigint
    • Datum und Uhrzeit des letzten Dateizugriffs
  • LastWriteTime
    • bigint
    • Datum und Uhrzeit der letzten Ändserung
  • ItemFileSubData
  • Empty
  • ItemFileAuthorisation
  • AccessId
    • int
    • Zugriffs-Id
  • Authorisation
    • int
    • Berechtigungen an der Datei (siehe Text)
  • ItemResult
  • Result
    • int
    • Ergebniswert

In dem Datenpaket werden alle Informationen über eine Datei zurückgegeben. In dem Bereich ItemFileCustom können benutzerdefinierte Informationen angegeben werden. Diese werden bei allen Dateioperationen wieder mit übergeben. Die Angabe von ItemFileCustom ist optional. Wird der Wert nicht übergeben, bleiben die Daten unverändert. Sollen die Informationen gelöscht werden, muss eine leere Zeichenkette übergeben werden.

Die Größe der Datei wird in FileSize in Bytes angegeben. Bei den Dateiattributen (FileAttributes) können folgende Konstanten kombiniert werden:

In dem Bereich ItemFileTime wird das Datum und die Uhrzeit der Dateierzeugung, des letzten Zugriffs und der letzten Änderung in Form von Zeitstempeln angegeben. Der Zeitstempel kann wie folgt berechnet werden:

tSystemCalTime->vmSystemTime();
tDrvMsxWrite->MsxWrite(_MsxData, CnvBC(tSystemCalTime));

In diesem Fall wird die Systemzeit zur Berechnung des Zeitstempels verwendet. Bei der Umrechnung wird die Zeitzone berücksichtigt.

In Empty wird angegeben, ob das Unterverzeichnis leer ist (true). Der Abschnitt darf für Dateien nicht angegeben werden.

Der Bereich ItemFileAuthorisation muss für jede Zugriffs-Id angegeben werden. Können sich Benutzer mit zwei unterschiedlichen Zugriffs-Ids anmelden (siehe DrvLoginDomainUser), müssen hier zwei Bereiche mit den entsprechenden Berechtigungen angegeben werden. Die Berechtigungen werden als OR-Kombination folgender Konstanten übergeben:

Wird in Result _ErrFsiNoFile angegeben, wird der Fehler "Datei nicht vorhanden" ausgegeben. Die Dateiinformationen werden nur übertragen, wenn im Resultat _ErrOk (0) angegeben wird.

Beispiel:

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

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

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

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileSize); // set file size
tDrvMsxWrite->MsxWrite(_MsxData, tImportedFile->FsiSize64());

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

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileTime); // set file time
tDrvMsxWrite->MsxWrite(_MsxData, tFileCreationTime);
tDrvMsxWrite->MsxWrite(_MsxData, tFileAccessTime);
tDrvMsxWrite->MsxWrite(_MsxData, tFileModifyTime);

// tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileSubData); // set sub data
// tDrvMsxWrite->MsxWrite(_MsxData, false);

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