您的位置:首页 > 编程语言 > VB

VB实现的FileStream代码

2008-03-29 13:21 381 查看

'Powered by barenx
' Global Memory Flags


Private Const GMEM_MOVEABLE = &H2


Private Const GMEM_ZEROINIT = &H40


Private Const GENERIC_READ = &H80000000


Private Const FILE_SHARE_READ = &H1


Private Const OPEN_EXISTING = &H3


Private Const FILE_ATTRIBUTE_TEMPORARY = &H100


Private Const S_OK = &H0


Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)


Private Type SECURITY_ATTRIBUTES


nLength As Long


lpSecurityDescriptor As Long


bInheritHandle As Long


End Type


Private Type OVERLAPPED


Internal As Long


InternalHigh As Long


offset As Long


OffsetHigh As Long


hEvent As Long


End Type




Private Declare Function GlobalAlloc()Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long




Private Declare Function GlobalSize()Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long




Private Declare Function GlobalLock()Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long




Private Declare Function GlobalUnlock()Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long




Private Declare Function CreateFile()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()Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long




Private Declare Function ReadFile()Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long 'OVERLAPPED




Private Declare Function CloseHandle()Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long




Private Declare Function GlobalFree()Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long






Sub LoadStreamFromFile()Sub LoadStreamFromFile(ByVal bstrFileName As String, ByRef pStream As IStream)


Dim hr As Long


Dim bReaded As Long


Dim hFile As Long


Dim dwFileSize As Long


Dim dwBytesRead As Long


Dim hGlobal As Long


Dim pvData As Long


Dim sa As SECURITY_ATTRIBUTES




With sa


.bInheritHandle = 0


.lpSecurityDescriptor = 0


.nLength = 0


End With




On Error Resume Next




hFile = CreateFile(bstrFileName, GENERIC_READ, FILE_SHARE_READ, sa, OPEN_EXISTING, FILE_ATTRIBUTE_TEMPORARY, 0)




If (hFile > 0) Then


dwFileSize = GetFileSize(hFile, 0)


If (dwFileSize > -1) Then


hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize)


End If


End If




If (hGlobal > 0) Then


pvData = GlobalLock(hGlobal)


If (pvData > 0) Then


bReaded = ReadFile(hFile, ByVal pvData, dwFileSize, dwBytesRead, 0&)


If (bReaded <> 0) Then


Set pStream = CreateStreamOnHGlobal(hGlobal, True)


pStream.Seek 0, 0


End If


GlobalUnlock (hGlobal)


End If




If (hr <> S_OK) Then


GlobalFree (hGlobal)


Set pStream = Nothing


End If


End If




If (hFile > 0) Then


CloseHandle (hFile)


End If


End Sub



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: