' 我自己试过,API比Open也就快大概30%~50%左右
' 下面是我用API读写文件的代码,你参考一下
' tmpWc是一个自定义类型
' 设置列标头结构文件路径
gstrHeaderFile = App.Path & DIR_SPLIT & LISTVIEW_HEADER_FILE
' 检测列标头结构文件是否存在
If Len (Dir(gstrHeaderFile)) = FILE_NOT_EXIST Then
gsteStartupError = ERROR_CFGMISSING
GoTo ExitDialog
End If
' 打开文件,获得文件句柄
hFile = CreateFile(gstrHeaderFile, GENERIC_READ, FILE_SHARE_READ, ByVal 0 & , OPEN_EXISTING, 0 , 0 )
' 根据句柄获得文件长度
fSize = GetFileSize(hFile, ByVal 0 & )
' 根据文件长度,判断文件大小是否符合
If (fSize Mod Len (tmpWc)) <> 0 Then
Call CloseHandle(hFile)
gsteStartupError = ERROR_CFGBROKEN
GoTo ExitDialog
End If
' 根据文件长度,设置列表数量
nCount = fSize / Len (tmpWc)
' 重新定义列表数量
ReDim gWC( 0 To nCount - 1 ) As WNDCONFIG
For i = 0 To nCount - 1
' 设置文件读取起点位置
SetFilePointer hFile, i * Len (gWC(i)), ByVal 0 & , FILE_BEGIN
' 读取内容,并将该内容赋值到变量中
ReadFile hFile, gWC(i), Len (gWC(i)), Rtn, ByVal 0 &
' 根据调用API函数所返回的真正读取文件内容字节数与实际变量大小对比,以判断读取文件是否出错
If Rtn <> Len (gWC(i)) Then
Call CloseHandle(hFile)
gsteStartupError = ERROR_CFGFAILED
GoTo ExitDialog
End If
Next i
' 关闭打开的文件句柄
CloseHandle hFile