WriteFile: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
K
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 2: Zeile 2:
  
  
<code vb>
+
<syntaxhighlight lang="vb">
 
Declare Function WriteFile Lib "kernel32.dll" ( _
 
Declare Function WriteFile Lib "kernel32.dll" ( _
 
                 ByVal hFile As Long, _
 
                 ByVal hFile As Long, _
Zeile 10: Zeile 10:
 
                 ByRef lpOverlapped As OVERLAPPED) As Long
 
                 ByRef lpOverlapped As OVERLAPPED) As Long
  
</code>
+
</syntaxhighlight>
  
  
Zeile 16: Zeile 16:
  
 
''hFile''
 
''hFile''
:Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit [[CreateFile]] oder [[OpenFile]] geöffnet worden sein.
+
:Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit [[CreateFile]] geöffnet worden sein.
  
 
''lpBuffer''
 
''lpBuffer''
Zeile 30: Zeile 30:
 
: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  
 
: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  
  
<code vb>ByVal lpOverlapped As Long</code>
+
<syntaxhighlight lang="vb">ByVal lpOverlapped As Long</syntaxhighlight>
  
:geschrieben und beim Aufruf [[NULL]] übergeben werden.
+
:geschrieben und beim Aufruf 0 übergeben werden.
  
  
Zeile 42: Zeile 42:
 
==Beispiel==
 
==Beispiel==
  
<code vb>
+
<syntaxhighlight lang="vb">
 
Option Explicit
 
Option Explicit
  
Zeile 60: Zeile 60:
 
                         ByVal nNumberOfBytesToWrite As Long, _
 
                         ByVal nNumberOfBytesToWrite As Long, _
 
                         ByRef lpNumberOfBytesWritten As Long, _
 
                         ByRef lpNumberOfBytesWritten As Long, _
                         ByRef lpOverlapped As Any) As Long
+
                         ByVal lpOverlapped As Long) As Long
  
 
Private Declare Function CloseHandle Lib "kernel32" ( _
 
Private Declare Function CloseHandle Lib "kernel32" ( _
Zeile 90: Zeile 90:
 
   End If
 
   End If
 
    
 
    
   retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, ByVal 0&)
+
   retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, 0&)
 
    
 
    
 
   If retVal = 0 Then
 
   If retVal = 0 Then
Zeile 98: Zeile 98:
 
   Call CloseHandle(hFile)
 
   Call CloseHandle(hFile)
 
End Sub
 
End Sub
</code>
+
</syntaxhighlight>
  
 
==Verwandte Funktionen==
 
==Verwandte Funktionen==
Zeile 111: Zeile 111:
 
==Quellen==
 
==Quellen==
  
[http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx MSDN Library - WriteFile]
+
[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

Quellen

MSDN Library - WriteFile