WriteFile: Unterschied zwischen den Versionen
Aus API-Wiki
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
__NOTOC__ | __NOTOC__ | ||
− | |||
− | < | + | <syntaxhighlight lang="vb"> |
Declare Function WriteFile Lib "kernel32.dll" ( _ | Declare Function WriteFile Lib "kernel32.dll" ( _ | ||
ByVal hFile As Long, _ | ByVal hFile As Long, _ | ||
− | lpBuffer As Any, _ | + | ByRef lpBuffer As Any, _ |
ByVal nNumberOfBytesToWrite As Long, _ | ByVal nNumberOfBytesToWrite As Long, _ | ||
− | lpNumberOfBytesWritten As Long, _ | + | ByRef lpNumberOfBytesWritten As Long, _ |
− | lpOverlapped As OVERLAPPED) As Long | + | ByRef lpOverlapped As OVERLAPPED) As Long |
− | </ | + | </syntaxhighlight> |
==Parameter== | ==Parameter== | ||
− | '' | + | ''hFile'' |
− | : | + | :Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit [[CreateFile]] geöffnet worden sein. |
− | '' | + | ''lpBuffer'' |
− | : | + | :Der Buffer, der die zu schreibenden Daten enthält. |
− | '' | + | ''nNumberOfBytesToWrite'' |
− | : | + | :Die Anzahl an Bytes, die es zu schreiben gilt. Es muss darauf geachtet werden, dass der in lpBuffer übergebene Wert mindestens nNumberOfBytesToWrite Byte lang ist. |
+ | ''lpNumberOfBytesWritten'' | ||
+ | :In die für lpNumberOfBytesWritten übergebene Variable wird die Anzahl tatsächlich geschriebener Bytes geschrieben. | ||
− | + | ''lpOverlapped'' | |
+ | :Zeiger auf eine Struktur vom Typ [[OVERLAPPED]]. Die Übergabe einer solchen Struktur ermöglicht unter anderem Asynchrone Schreibzugriffe auf eine Datei. Soll keine [[OVERLAPPED]]-Struktur übergeben werden, muss bei der Deklaration | ||
− | + | <syntaxhighlight lang="vb">ByVal lpOverlapped As Long</syntaxhighlight> | |
+ | :geschrieben und beim Aufruf 0 übergeben werden. | ||
− | |||
− | + | ==Rückgabe(n)== | |
− | |||
− | |||
− | + | Die Funktion gibt einen Wert des Types ''Long'' ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ==Beispiel== | ||
− | = | + | <syntaxhighlight lang="vb"> |
+ | Option Explicit | ||
− | + | Private Declare Function CreateFile Lib "kernel32" _ | |
+ | Alias "CreateFileA" ( _ | ||
+ | ByVal lpFileName As String, _ | ||
+ | ByVal dwDesiredAccess As Long, _ | ||
+ | ByVal dwShareMode As Long, _ | ||
+ | ByRef lpSecurityAttributes As Any, _ | ||
+ | ByVal dwCreationDisposition As Long, _ | ||
+ | ByVal dwFlagsAndAttributes As Long, _ | ||
+ | ByVal hTemplateFile As Long) As Long | ||
− | + | Private Declare Function WriteFile Lib "kernel32.dll" ( _ | |
− | + | ByVal hFile As Long, _ | |
− | + | ByRef lpBuffer As Any, _ | |
− | + | ByVal nNumberOfBytesToWrite As Long, _ | |
+ | ByRef lpNumberOfBytesWritten As Long, _ | ||
+ | ByVal lpOverlapped As Long) As Long | ||
+ | Private Declare Function CloseHandle Lib "kernel32" ( _ | ||
+ | ByVal hObject As Long) As Long | ||
− | == | + | Private Const GENERIC_WRITE As Long = &H40000000 |
+ | Private Const GENERIC_READ As Long = &H80000000 | ||
− | + | Private Const FILE_SHARE_READ As Long = &H1 | |
− | + | Private Const FILE_SHARE_WRITE As Long = &H2 | |
+ | Private Const OPEN_ALWAYS As Long = 4 | ||
− | = | + | Private Const INVALID_HANDLE_VALUE As Long = -1 |
− | + | Private Sub Form_Load() | |
− | + | Dim hFile As Long, retVal As Long, BytesWritten As Long | |
− | + | Dim TextToWrite As String | |
− | + | ||
+ | TextToWrite = "Hallo, Welt!" | ||
+ | |||
+ | hFile = CreateFile("C:\Test.txt", GENERIC_WRITE, _ | ||
+ | FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0&, 0&) | ||
+ | |||
+ | If hFile = INVALID_HANDLE_VALUE Then | ||
+ | Call MsgBox("Es ist ein Fehler beim Aufruf an CreateFile aufgetreten.") | ||
+ | ' Der Rest wird nun nicht mehr funktionieren, Prozedur verlassen | ||
+ | Exit Sub | ||
+ | End If | ||
+ | |||
+ | retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, 0&) | ||
+ | |||
+ | If retVal = 0 Then | ||
+ | Call MsgBox("Es ist ein Fehler beim Aufruf an WriteFile aufgetreten.") | ||
+ | End If | ||
+ | |||
+ | Call CloseHandle(hFile) | ||
+ | End Sub | ||
+ | </syntaxhighlight> | ||
+ | ==Verwandte Funktionen== | ||
+ | [[OpenFile]] - Eine Datei öffnen<br /> | ||
+ | [[CreateFile]] - Eine Datei erstellen, falls sie nicht existiert, und sie öffnen<br /> | ||
+ | [[ReadFile]] - Aus einer Datei lesen<br /> | ||
+ | [[WriteFileEx]] - Schreiben einer Datei<br /> | ||
+ | [[ReadFileEx]] - Lesen einer Datei<br /> | ||
+ | [[CloseHandle]] - Eine Datei schließen | ||
− | == | + | ==Quellen== |
− | + | [http://msdn.microsoft.com/en-us/library/aa365747.aspx MSDN Library - WriteFile] | |
− | |||
[[Kategorie:Dateien und Laufwerke]] | [[Kategorie:Dateien und Laufwerke]] | ||
[[Kategorie:Kernel]] | [[Kategorie:Kernel]] | ||
− |
Aktuelle Version vom 7. Oktober 2016, 22:25 Uhr
Declare Function WriteFile Lib "kernel32.dll" ( _
ByVal hFile As Long, _
ByRef lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
ByRef lpNumberOfBytesWritten As Long, _
ByRef lpOverlapped As OVERLAPPED) As Long
Parameter
hFile
- Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit CreateFile geöffnet worden sein.
lpBuffer
- Der Buffer, der die zu schreibenden Daten enthält.
nNumberOfBytesToWrite
- Die Anzahl an Bytes, die es zu schreiben gilt. Es muss darauf geachtet werden, dass der in lpBuffer übergebene Wert mindestens nNumberOfBytesToWrite Byte lang ist.
lpNumberOfBytesWritten
- In die für lpNumberOfBytesWritten übergebene Variable wird die Anzahl tatsächlich geschriebener Bytes geschrieben.
lpOverlapped
- Zeiger auf eine Struktur vom Typ OVERLAPPED. Die Übergabe einer solchen Struktur ermöglicht unter anderem Asynchrone Schreibzugriffe auf eine Datei. Soll keine OVERLAPPED-Struktur übergeben werden, muss bei der Deklaration
ByVal lpOverlapped As Long
- geschrieben und beim Aufruf 0 übergeben werden.
Rückgabe(n)
Die Funktion gibt einen Wert des Types Long ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.
Beispiel
Option Explicit
Private Declare Function CreateFile Lib "kernel32" _
Alias "CreateFileA" ( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
ByRef lpSecurityAttributes As Any, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32.dll" ( _
ByVal hFile As Long, _
ByRef lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
ByRef lpNumberOfBytesWritten As Long, _
ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Private Const GENERIC_WRITE As Long = &H40000000
Private Const GENERIC_READ As Long = &H80000000
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const OPEN_ALWAYS As Long = 4
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Sub Form_Load()
Dim hFile As Long, retVal As Long, BytesWritten As Long
Dim TextToWrite As String
TextToWrite = "Hallo, Welt!"
hFile = CreateFile("C:\Test.txt", GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0&, 0&)
If hFile = INVALID_HANDLE_VALUE Then
Call MsgBox("Es ist ein Fehler beim Aufruf an CreateFile aufgetreten.")
' Der Rest wird nun nicht mehr funktionieren, Prozedur verlassen
Exit Sub
End If
retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, 0&)
If retVal = 0 Then
Call MsgBox("Es ist ein Fehler beim Aufruf an WriteFile aufgetreten.")
End If
Call CloseHandle(hFile)
End Sub
Verwandte Funktionen
OpenFile - Eine Datei öffnen
CreateFile - Eine Datei erstellen, falls sie nicht existiert, und sie öffnen
ReadFile - Aus einer Datei lesen
WriteFileEx - Schreiben einer Datei
ReadFileEx - Lesen einer Datei
CloseHandle - Eine Datei schließen