GetFileSizeEx: Unterschied zwischen den Versionen
Aus API-Wiki
(→Verweise) |
K |
||
Zeile 8: | Zeile 8: | ||
) As Long | ) As Long | ||
</PRE> | </PRE> | ||
− | |||
===Parameter=== | ===Parameter=== | ||
Zeile 17: | Zeile 16: | ||
''lpFileSize'' | ''lpFileSize'' | ||
:Pointer auf eine [[LARGE_INTEGER]] Struktur, die die Größe der Datei erhält. | :Pointer auf eine [[LARGE_INTEGER]] Struktur, die die Größe der Datei erhält. | ||
− | |||
===Rückgabe=== | ===Rückgabe=== | ||
Glückt GetFileSizeEx, gibt es einen Wert ungleich 0 zurück. Andernfalls können genauere Informationen mit [[GetLastError]] angefordert werden. | Glückt GetFileSizeEx, gibt es einen Wert ungleich 0 zurück. Andernfalls können genauere Informationen mit [[GetLastError]] angefordert werden. | ||
− | |||
===Beispiel=== | ===Beispiel=== | ||
Zeile 104: | Zeile 101: | ||
End Function | End Function | ||
</PRE> | </PRE> | ||
− | |||
===Betriebssystem=== | ===Betriebssystem=== | ||
Zeile 110: | Zeile 106: | ||
*Windows 2000 / XP | *Windows 2000 / XP | ||
*Windows Vista | *Windows Vista | ||
− | |||
===Verweise=== | ===Verweise=== | ||
[http://msdn2.microsoft.com/en-us/library/aa364957.aspx MSDN US-Libary - GetFileSizeEx] | [http://msdn2.microsoft.com/en-us/library/aa364957.aspx MSDN US-Libary - GetFileSizeEx] | ||
− | |||
− | |||
− | |||
− | |||
[[Kategorie: Kernel]] | [[Kategorie: Kernel]] | ||
− |
Version vom 7. Mai 2008, 12:18 Uhr
GetFileSizeEx ermittelt die Größe einer Datei, und unterstützt auch Dateien größer als 4 GB.
Declare Function GetFileSizeEx Lib "kernel32.dll" ( _ ByVal hFile As Long, _ lpFileSize As LARGE_INTEGER _ ) As Long
Parameter
hFile
- Handle zu einer mit CreateFile geöffneten Datei.
lpFileSize
- Pointer auf eine LARGE_INTEGER Struktur, die die Größe der Datei erhält.
Rückgabe
Glückt GetFileSizeEx, gibt es einen Wert ungleich 0 zurück. Andernfalls können genauere Informationen mit GetLastError angefordert werden.
Beispiel
Option Explicit Private Declare Function CreateFile Lib "kernel32.dll" _ Alias "CreateFileA" ( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ lpSecurityAttributes As Any, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long _ ) As Long Private Declare Function GetFileSizeEx Lib "kernel32.dll" ( _ ByVal hFile As Long, _ ByRef lpFileSize As LARGE_INTEGER _ ) As Long Private Declare Function CloseHandle Lib "kernel32.dll" ( _ ByVal hObject As Long _ ) As Long Private Type LARGE_INTEGER LoPart As Long HiPart As Long End Type Private Const OPEN_EXISTING = 3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const GENERIC_READ = &H80000000 Private Sub Form_Load() Dim hFile As Long Dim udtSize As LARGE_INTEGER Dim varSize As Variant hFile = CreateFile("D:\IsoFile.iso", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, _ ByVal 0&, OPEN_EXISTING, 0, 0) If hFile <> -1 Then If GetFileSizeEx(hFile, udtSize) Then varSize = To64BitInt(udtSize.LoPart, udtSize.HiPart, False) Debug.Print "Größe: " & (varSize / (1000# * 1000#)) & " MB" Else Debug.Print "GetFileSizeEx fehlgeschlagen. Err: " & Err.LastDllError End If CloseHandle hFile Else Debug.Print "CreateFile fehlgeschlagen. Err: " & Err.LastDllError End If End Sub Private Function To64BitInt( _ ByVal lngLo As Long, _ ByVal lngHi As Long, _ Optional ByVal signed As Boolean = True _ ) As Variant Dim value As Variant If (lngLo And &H80000000) Then value = CDec(lngLo And &H7FFFFFFF) + CDec(2147483648#) Else value = CDec(lngLo) End If If (Not signed) And (lngHi And &H80000000) Then lngHi = lngHi And &H7FFFFFFF value = value + (CDec(lngHi) + CDec(2147483648#)) * CDec(4294967296#) Else value = value + CDec(lngHi) * CDec(4294967296#) End If To64BitInt = value End Function
Betriebssystem
- Windows 2000 / XP
- Windows Vista