Zum Hauptinhalt springen

DrvGetFileInfo

DrvGetFileInfo

Aufruf beim Abfragen von Dateiinformationen

Details

  • Request
  • MessageId: _DrvReqGetFileInfo Id des Ereignisses
  • ItemHeader: _DrvItemHeader Kopf des Datenpakets
  • ProtocolId: 0xF3A49E52 Id des verwendeten Protokolls
  • ProtocolVersion: 0x00040000 Version des verwendeten Protokolls
  • ItemAuthUserDomain: _DrvItemAuthUserDomain Informationsbereich des am Betriebssystem angemeldeten Benutzers
  • UserName: alpha Name des angemeldeten Benutzers
  • DomainName: alpha Domäne des angemeldeten Benutzers
  • ItemFilePath: _DrvItemFilePath Informationsbereich der Datei
  • FilePath: alpha Pfad- und Dateiname (ohne Laufwerksbuchstabe)
  • ItemFileCustom: _DrvItemFileCustom Informationsbereich für benutzerdefinierte Daten
  • Custom01: alpha Benutzerdefinierte Informationen
  • Siehe: Verwandte Befehle

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