DrvGetFileInfo
DrvGetFileInfo
Aufruf beim Abfragen von Dateiinformationen
Details
- Request
MessageId:_DrvReqGetFileInfoId des EreignissesItemHeader:_DrvItemHeaderKopf des DatenpaketsProtocolId:0xF3A49E52Id des verwendeten ProtokollsProtocolVersion:0x00040000Version des verwendeten ProtokollsItemAuthUserDomain:_DrvItemAuthUserDomainInformationsbereich des am Betriebssystem angemeldeten BenutzersUserName:alphaName des angemeldeten BenutzersDomainName:alphaDomäne des angemeldeten BenutzersItemFilePath:_DrvItemFilePathInformationsbereich der DateiFilePath:alphaPfad- und Dateiname (ohne Laufwerksbuchstabe)ItemFileCustom:_DrvItemFileCustomInformationsbereich für benutzerdefinierte DatenCustom01:alphaBenutzerdefinierte 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
ProtocolId0xF3A49E52- Id des verwendeten Protokolls
ProtocolVersion0x00040000- Version des verwendeten Protokolls
ItemFileCustom_DrvItemFileCustom- Informationsbereich für den Programmierer
Custom01alpha- Benutzerdefinierte Informationen
ItemFileSize_DrvItemFileSize- Informationsbereich für die Dateigröße
FileSizebigint- Größe der Datei (in Bytes)
ItemFileAttributes_DrvItemFileAttributes- Informationsbereich für die Dateiattribute
FileAttributesint- Dateiattribute
ItemFileTime_DrvItemFileTime- Informationsbereich für Dateidatum und -uhrzeit
CreationTimebigint- Datum und Uhrzeit der Dateierstellung
LastAccessTimebigint- Datum und Uhrzeit des letzten Dateizugriffs
LastWriteTimebigint- Datum und Uhrzeit der letzten Ändserung
ItemFileSubData_DrvItemFileSubData- Informationsbereich für weitere Daten
EmptyItemFileAuthorisation_DrvItemFileAuthorisation- Informationsbereich für die Dateiberechtigungen
AccessIdint- Zugriffs-Id
Authorisationint- Berechtigungen an der Datei (siehe Text)
ItemResult_DrvItemResult- Ergebnis-Bereich
Resultint- 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:
_FsiAttrHidden: Versteckte Datei_FsiAttrSystem: Systemdatei_FsiAttrDir: Verzeichnis_FsiAttrArchive: Archivdatei
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:
_DrvAuthAll: Alle Rechte vorhanden_DrvAuthNone: Keine Rechte vorhanden_DrvAuthList: Dateien und Verzeichnisse listen_DrvAuthDelete: Dateien und Verzeichnisse löschen_DrvAuthRename: Dateien und Verzeichnisse umbenennen_DrvAuthMove: Dateien und Verzeichnisse verschieben_DrvAuthSetAttributes: Attribute von Dateien und Verzeichnissen setzen_DrvAuthRead: Datei lesen_DrvAuthWrite: Datei schreiben_DrvAuthExecute: Datei ausführen_DrvAuthCreateDirectory: Verzeichnis erstellen_DrvAuthCreateFile: Datei erstellen
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();
}