CreateFile

Aus API-Wiki
Wechseln zu: Navigation, Suche

Diese Funktion öffnet, erstellt oder kürzt??? eine Datei, einen COM-Port, ein Gerät, einen Diest oder eine Console.

Sie gibt ein Handle zurück, dass den Zugriff ermöglicht.

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
                            ByVal lpFileName As String, _
                            ByVal dwDesiredAccess As Long,  _
                            ByVal dwShareMode As Long,  _
                            ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
                            ByVal dwCreationDisposition As Long, _
                            ByVal dwFlagsAndAttributes As Long, _
                            ByVal hTemplateFile As Long) As Long


Parameter:

lpFileName [übergabe]

Übergabe eines Pfades (maximalen Länge "Const MAX_PATH = 260"). Bei Zugriff auf das Com-Objekt ist nach dem Portnamen ein Doppelpunkt erwartet z.B.: COM1:


dwDesiredAccess [übergabe]

Übergabe der Zugriffsart. GENERIC_READ, GENERIC_WRITE, GENERIC_EXECUTE und Mischformen.


dwShareMode [übergabe]

Gibt das Verhalten der Datei gegenüber anderen Zugriffen an. FILE_SHARE_READ, FILE_SHARE_WRITE und Mischforen.


lpSecurityAttributes [übergabe]

Wird nicht benötigt. Übergabe daher ByVal 0&.


dwCreationDisposition [übergabe]

Gibt an, wie sich CreateFile bei verschiedenen Situationen verhält. Ist die Datei beispielsweise bereits vorhanden, so wird bei gesetztem Flag "CREATE_ALWAYS" die Datei überschrieben.

Eine vollständige Liste der Flags findet sich in der MSDN[1]


dwFlagsAndAttributes [übergabe]

Gibt an, mit welchen Dateiattributen die Datei erstellt werden soll. Standardwert ist: FILE_ATTRIBUTE_NORMAL.

Eine vollständige Liste der Flags findet sich in der MSDN[2]


hTemplateFile [übergabe]

Wird ignoriert. Die Übergabe daher "0".


Rückgabewert(e):

Ein Dateihandle ungleich 0 ist ein Anzeichen für den erfolgreichen Zugriff. Wenn die Datei hingegen schon vor dem Zugriff existiert hat, und der Flag "CREATE_ALWAYS / OPEN_ALWAYS" gesetzt wurde, so gibt GetLastError "ERROR_ALREADY_EXISTS" zurück obgleich die Funktion erfolgreich war. Wenn die Datei noch nicht vorhanden war, so gibt GetLastError "0" zurück.

Um festzustellen, ob ein Dateihandle gültig ist, empfielt sich ein Vergleich mit "Const INVALID_HANDLE_VALUE = -1" durchzuführen.


Sonstige Hinweise:

Um ein Objekthandle wieder zu schließen (und das Objekt damit ggf. freizugeben) ist die CloseHandle - Funktion zu verwenden.

Weiter Hinweise, wie beispielsweise zur Verwendung mit FILE_FLAG_NO_BUFFERING finden sich wie gewohnt in der MSDN[3]


Beispiel:

    FileHandle = CreateFile(Path, GENERIC_READ, FILE_SHARE_READ Or _
                            FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, _
                            FILE_FLAG_NO_BUFFERING, 0)
    
    If Not FileHandle <> INVALID_HANDLE_VALUE Then
        'Fehler beim Zugriff
    End If