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
相关文章推荐
- asp.net中用VB.net读取DataGrid中行的实现
- 在VB.NET中怎么实现多窗体同步(1)
- VB代码实现屏幕截图(Screenshot功能)
- 用VB实现COM+组件配置
- K-means(K-均值)算法和降维对分算法 VB实现及应用
- 经典加密算法在VB中的实现(3)- RC4
- 利用VB实现对IE的调用与控制
- VB.Net实现Web Service的基础
- VB.Net中确认退出对话框的实现
- 讲解实现VB.NET打开Notes数据库相关详细信息
- vb编程中钩子的实现及应用
- VB.NET Winform的一些功能实现
- 在VB中用定时控件实现长定时操作
- 在vb.net中实现窗体上回车键代替TAB键
- VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法
- 在vb中实现鼠标手势
- VB.NET实现应用程序自动更新2
- VB实现文件数据对SQL Server上传下载
- 微软的设计思想:总感觉有点返祖现象,以前VB中很方便的功能,在C#中却要很复杂才能实现 treeview
- VB.NET实现动态加载控件数组