说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB使用WriteFile 块读写数据

HTML文档下载 WORD文档下载 PDF文档下载
VB使用WriteFile 块读写数据
概述
Win32 API 提供了OpenFile 和 WriteFile 函数, 可以对二进制的文件进行读/写。 这两个函数使读/写格式化的文件更加灵活。 这里演示了操作大量格式化数组的一种技巧, 一次完成, 无须一个一个地操作。

实现步骤
1 打开一个新的工程。 增加一个 MODULE1.BAS。

2 把下面的代码复制到 MODULE1.BAS。

Public Const GENERIC_WRITE = &H40000000
Public Const GENERIC_READ = &H80000000
Const FILE_ATTRIBUTE_NORMAL = &H80
Const CREATE_ALWAYS = 2
Const OPEN_ALWAYS = 4
Const INVALID_HANDLE_VALUE= -1
Const FILE_NAME = "TEST.DAT" '任意一个文件名称

Type MyType
value As Integer
End Type

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

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

Private Declare Function WriteFile Lib "kernel32" ( _
ByVal hFile As Long, lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long

Private Declare Function CreateFile Lib "kernel32" _
Alias "CreateFileA" (ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As Long, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) _
As Long

Declare Function FlushFileBuffers Lib "kernel32" ( _
ByVal hFile As Long) As Long

Sub fillArray(anArray() As MyType)
Dim x As Integer

For x = 0 To UBound(anArray)
anArray(x).value = x
Next x
End Sub

Sub Main()
Dim fHandle As Integer
Dim T(1000) As MyType '定义一个大数组
Dim S(1000) As MyType '定义又一个大数组

fillArray T '填充
writearray FILE_NAME, T '把整个数组写入文件
readArray FILE_NAME, S '读到另一个数组
End Sub

Sub readArray(Fname As String, anArray() As MyType)
Dim fHandle As Long
Dim fSuccess As Long
Dim sTest As String
Dim lBytesRead As Long
Dim BytesToRead As Long

'取数据大小
BytesToRead = (UBound(anArray) + 1) * LenB(anArray(0))
'取 Fname 的句柄
fHandle = CreateFile(Fname, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
'CreateFile 失败的话返回 INVALID_HANDLE_VALUE
If fhandle <> INVALID_HANDLE_VALUE Then
fSuccess = ReadFile(fHandle, anArray(LBound(anArray)), _
BytesToRead, lBytesRead, 0)
'ReadFile 成功后返回一个非 0 值
'关闭文件
fSuccess = CloseHandle(fHandle)
End If
End Sub

Sub writearray(Fname As String, anArray() As MyType)
Dim fHandle As Long
Dim fSuccess As Long
Dim sTest As String
Dim lBytesWritten As Long
Dim BytesToWrite As Long
'取数据大小
BytesToWrite = (UBound(anArray) + 1) * LenB(anArray(0))
'取 Fname 的句柄
fHandle = CreateFile(Fname, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
'CreateFile 失败的话返回 INVALID_HANDLE_VALUE
If fhandle <> INVALID_HANDLE_VALUE Then
fSuccess = WriteFile(fHandle, anArray(LBound(anArray)), _
BytesToWrite, lBytesWritten, 0)
'WriteFile 成功后返回一个非 0 值
If fSuccess <> 0 Then
'刷新文件缓冲, 马上写入数据
fSuccess = FlushFileBuffers(fHandle)
'关闭文件
fSuccess = CloseHandle(fHandle)
End If
End If
End Sub

3 在菜单 “工程”-“工程1 属性”中, 设置“启动对象” 为 “Sub Main”。

4 按 F5 开始运行。
为什么Android应用开发总要比iOS晚? 传奇VC马克.安德雷森:未来的企业什么样? 呼吁国会通过“创业签证”:奥巴马助力美国招揽海外人才 Surface Pro最低1019美元,价值究竟如何? 搜狗号码通' ;&+"vHE' ;&+"据和运营更关键 在线推荐系统是如何进行工作的? 欧朋浏览器上架App Store,iOS生态真要变天? 苹果iOS 6.1地图搜索API将替代谷歌Places Oracle向开发者承诺 称尽快修复Java安全问题 日本:开发者与投资人都不容忽视的移动市场 Unity 3D引擎:十大最火的插件推荐 重塑品牌 RIM更名黑莓 发布BlackBerry 10移动操作系统及新手机 NoSQL依赖的不只是大数据 还有应用程序架构的改变 新一代Apple TV增强内在组件 外观不变 加速Web开发的7款知名HTML5框架 Firefox OS开发者日来袭 5小时15款Web应用出炉! 微软发布Office 365家庭高级版 订阅费499元/年 鲍尔默对Office信心满满,十亿用户量触手可及 【多图】梦幻现实 IBM的未来超级计算机水世界 一名骨灰级工程师的OpenStack部署总结引发的讨论 解读DuckDuckGo搜索 百万点击也敢叫板Google 开发者成功学:扔掉你那些很sexy的想法 VMware严控ESXi API 引发用户和ISV被绑架担忧 布局O2O Facebook推出实物礼品卡 iSuppli:微软Surface RT实际销量远低于出货量 业界前三甲:App Store两个刷榜者,站了出来 极客无极限 一行HTML5代码引发的创意大爆炸 将服务器“弃”之荒野? 微软玩转露天数据中心 Dropbox:我们现在关注“内容” 而不仅仅是文件存储 访Teradata Aster Mayank Bawa:抛弃无效数据,让分析走向大众化 谷歌Chrome或新增通知中心 与Google Now整合 asp程序取sql存储过程返回参数的问题 精品:数据库-表字段类型的写法!! 谁知道一般网站的在线人数统计功能是如何实现的? 如何处理float型的长度问题? 请大家帮忙这个存储过程该怎样设计?呵呵,不好意思!第一次发贴发错了^_^ 在线请教,找错 请高手门帮我解决一个问题! 请问如何把一个form的关闭按钮屏蔽掉而只留下标题栏? 高手::::请教一个简单的问题???? 还是.net连oracle的问题 急救!VB访问Linux服务器上的Oracle8i的问题 如何在没有安装.net的机子上运行C#程序阿?? 在模板实参推演中,数组的长度是如何得知的呢??? asp作提交表单 自动发到指定邮箱里。 急哭了!在线等待!!!!!! 为何我的sql服务管理器停止不了,一直为“正在停止”,而一旦停止了却又启动不起来? 怎样调用IE的一些功能??? 求教,急! 初学asp,问个简单的问题吧:怎么样知道客户端的时间? strus的配置和使用,我用jdevelop, ADO+MSSQL对DataSet中Record定位 欢迎讨论,关于水晶报表实现:折线图,或者柱形图问题 在线求助:如何读取B端操作系统信息和浏览器信息? 系統用戶使用權限的設計 combox 问题 急寻MAYA编程高手 服务器端有一个很大的XML(10M)文件,怎样从client端读取? CMainFrame 的窗口句柄怎么得到 从数据库读出文本如何保持原来格式 ? 在winform中,请教关于combobox的一个小问题 Stream Write error??????????? 存储过程的and和or连用 谁有新浪或网易等的短信网关接口? 请问如何在水晶报表里面定义一个全局变量?谢谢 如何配置SMTP服务 使用触发器时想到的 为什么要实现双接口 求DOM(DOMAIN OBJECT MODEL)的详细资料,顶着有分 winxp 在重启时总是提示:"此媒体的类型产品号无效请用正确的cd重新安装",系统进不去! 那位老大给仍一个visual assist 6.0的key,等待中。。。。 请问哪儿有类似于TDBchart数据显示的图形控件? 服务器端有一个很大的XML(10M)文件,怎样从client端读取? 业务导肮? 安全操作系统,谁能用? delphi7中怎么关闭一个子窗体,然后又能正常创建 急!请问怎样把SimensSDK和CodeWarrior整合起来? 江湖救急! 还是关于两个时间之间的处理的问题,大家看看! 高分求助:关于OPENFORM的问题! <秦>(全本) :am(酒徒) 强烈推荐 安全操作系统,谁能用? 高手助我!!!如何从数据库中的日期格式中分别取得年、月、日??? 集合,有图也行.就一道, 人口因素对城市规划的影响 生物的遗传和什么有关系?生物的类型是由什么决定的,同种生物个体之间的差异又是由什么决定的? 英语翻译Could you do the writing in white colour and the back ground in a dark green.or dark blue or black.Andersons Road.Please add a s I realized it is Andersons Road8 Proctors Way needs a space between Proctors and Way. 林中小溪中小溪的目标是什么 l'm sorry,let us miss.帮我翻译…越详细越好, 线性关系是什么 影响城市气候的基本因素是什么? 大气污染对全球气候和城市气候有何影响 什么是线性关系 啥叫做线性关系?最好举几个例子.Thank you very much! 江苏成人高考:医学类考生考试要查指纹首尔FC主场如临大敌 恒大球迷将占到土硬顶别买中国导弹警告 已用中方导弹金正恩出席朝军2万人连长大会 发表\中印携手,印媒欢呼并警惕美国情报机构“搞砸了”奥斯卡影后赞与查尔斯王子跳舞比“亲热朝或将第四次核试 美韩揣测朝“核冒险美国“窃听门”或成欧盟峰会议题 法国第七届阿布扎比电影节开幕巴西国企独揽石油招标引抗议 政府进退“骗”婚 上广东潮人海外联谊会举行理事大会宝桑园将迎来“好伙伴”下一篇便中860万明起广州至济南青岛高铁天天发车现在降价对行业是好事汉堡准备降级“后事”涉嫌严重违纪被调查总统奥朗德工作安排紧凑 被认为是少见数独游戏
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘