CreateFile

Aus API-Wiki
Zur Navigation springenZur Suche springen

Diese Funktion öffnet oder erstellt eine Datei, oder einen Datenkanal. Kanäle können ein COM- oder LPT-Port, ein Gerät, einen Diest oder eine Console sein.

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 (maximale Länge "Const MAX_PATH = 260"). Bei Zugriff auf das Com-Objekt wird 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 ist daher "0".


Rückgabewert(e):

Ein Dateihandle ungleich 0 ist ein Zeichen 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.

Weitere Hinweise, wie beispielsweise zur Verwendung mit FILE_FLAG_NO_BUFFERING finden sich 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