Option Explicit
Public Enum enumCreationDisposition
CREATE_NEW = 1
CREATE_ALWAYS = 2
OPEN_EXISTING = 3
OPEN_ALWAYS = 4
TRUNCATE_EXISTING = 5
End Enum
Public Enum enumFileAttribute
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_DEVICE = &H40
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_TEMPORARY = &H100
FILE_ATTRIBUTE_SPARSE_FILE = &H200
FILE_ATTRIBUTE_REPARSE_POINT = &H400
FILE_ATTRIBUTE_COMPRESSED = &H800
FILE_ATTRIBUTE_OFFLINE = &H1000
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = &H2000
FILE_ATTRIBUTE_ENCRYPTED = &H4000
End Enum
Public Enum enumShareMode
FILE_SHARE_READ = &H1
FILE_SHARE_WRITE = &H2
FILE_SHARE_READ_WRITE = &H3
FILE_SHARE_DELETE = &H4
End Enum
Public Enum enumDesiredAccess
GENERIC_WRITE = &H40000000
GENERIC_READ = &H80000000
GENERIC_READ_WRITE = &HC0000000
End Enum
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private FHandle As Long
Private FName As String
Public Function OpenFile(Optional ByVal sFileName As String, Optional ByVal Access As enumDesiredAccess = GENERIC_READ_WRITE, _
Optional ByVal ShareMode As enumShareMode = FILE_SHARE_READ_WRITE, _
Optional ByVal CreationDisposition As enumCreationDisposition = OPEN_ALWAYS, _
Optional ByVal Attributes As enumFileAttribute = FILE_ATTRIBUTE_NORMAL) As Boolean
Dim SA As SECURITY_ATTRIBUTES
If sFileName = "" Then sFileName = FName
If FHandle <> 0 Then Me.CloseFile
FHandle = CreateFile(sFileName, Access, ShareMode, SA, CreationDisposition, Attributes, 0)
OpenFile = FHandle <> -1
If Not OpenFile Then
FHandle = 0
Else
FName = sFileName
End If
End Function
Public Function CloseFile() As Boolean
If FHandle <> 0 Then CloseFile = CloseHandle(FHandle) <> 0
If CloseFile Then FHandle = 0
End Function
Public Function FileSize(Optional ByRef SizeHigh As Long = 0) As Long
If FHandle <> 0 Then
FileSize = GetFileSize(FHandle, SizeHigh)
End If
End Function
Public Function FileSizeDouble() As Double
Dim SizeLow As Long, SizeHigh As Long
SizeLow = FileSize(SizeHigh)
FileSizeDouble = CDbl(SizeHigh) * (2 ^ 32) + LongToDouble(SizeLow)
End Function
Private Function LongToDouble(ByVal Lng As Long) As Double
If Lng And &H80000000 = 0 Then
LongToDouble = CDbl(Lng)
Else
LongToDouble = (Lng Xor &H80000000) + (2 ^ 31)
End If
End Function
Private Sub Class_Terminate()
CloseFile
End Sub