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

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 开始运行。
UIDesigner 3.0架构设计总结 黑客怒了:政府花930万美金仅做一款App Email服务迎来“第二春” 未来将更加个性化 贯穿应用开发始终的八大陷阱 微评微软也推智能手表:是追求未来,还只是跟随? Firefox OS今年6月在5国首发 不含美国市场 8086/8088汇编指令手册 下一个被黑客攻击的对象—无线路由器 Windows Blue开始按钮或将回归,你怎么看? Evernote推孵化器 不占股权 基于C++和Lua的移动游戏引擎Leadwerks 3发布 苹果秘密测试iOS 7与iPhone 6 或将6月发布 酷6 CTO 陆坚:请先信任你的程序员 从电信联手i-Free,看运营商渠道的加速整合 “Animory”开发者分享HTML5游戏开发经验 Appflood SDK:连接中国与海外App流量交互平台 Apache Subversion 1.7.9正式发布! 微软IE浏览器5大动向 加速吸引开发者 开源的简繁转换库OpenCC支持Node.js 继Opera之后,Adobe表示将支持Google Blink 提高大型软件项目质量的一些实用型技术分享 谷歌推出Mirror API,开发者可为Google Glass开发应用 无需999,也不要499,99美元Linux超级计算机带回家 微软反击AWS:推出EC2并大幅降价,“价格战”正酣 Operation InVersion:拯救了LinkedIn的大修项目 五步走战略——Avocado在最初几周内迅速扩大30倍 NoSQL产品测评:Cassandra、MongoDB、Couchbase和Aerospike 谷歌眼镜开箱评测:比想象更精致 Pinterest谈实战经验:如何在两年内实现零到数百亿的月访问 初创公司Instart Logic:专为电子出版商和网站站长解决“痛点” 未来即卖芯片又卖服务!Intel收购软件厂商Mashery 当前提供者不支持索引必需的界面 没有马甲的来这里报到! linu和windows都不能启动了,怎么办,急急急!!! 请问,在PB中怎么为自定义窗体类定义一个虚拟方法? 熟悉memfile的朋友请进 php调VB程序?着急! vb 访问另一台sql server 的问题? 谁有flashmx,dreamwerver mx,firework mx 的注册吗。有100分 很急的问题? 断点无效?? 想给自己买一个数码相机做新年礼物!但对选中的品牌不是很熟!请师哥师姐给点建议!!! 如何对视图连接的表进行数据插入?? 谁会替用户负责?用“小灵通”还是小心为妙 做过考勤管理的请进………… 简单问题,麻烦各位高手!!! 请问delphi5中有没有delphi6中的object treeview功能 哪有关于网络安全方面的资料? 三层MIS中的中间件怎么用COM或EJB来实现. 请问哪里的个人主页控件支持JSP? 再次请教一个有关DataGrid不能显示而令人头晕的问题(在线等待)! 做过考勤管理的请进………… 在ASP.NET中怎样实现语句加入引用? 请问下面这个问题应该怎么解决最好?关于处理网页中的数据的 使用VB6自带的Sample中自动化示例应用程序时的一个问题 那位高手知道怎样实现曲线分析图... 一个简单SESSION 问题,请解决。在线等,没分了不好意思. 为什么在asp中使用ADODb的Connection对象的方法时不能使用事务处理 ====寂寞啊!谁帮介绍一个女孩啊(15-18)岁的!!万分感谢!==== 高分请教大虾,关于搜索的问题?。。。。 100分请教一个简单的问题?? runtime在JAVA中解释应该是什么意思? SCO上的ORACLE7建库?SOS 大家来看看,超级Bug?用DBExpress连接MSSQL,执行存储不能返回值,谁能解决,200分 高分请教,谢谢了/。。。。 我在程序中使用了MSXML,可是在干净的win98下无法运行,请问需要安装什么? 救急: SQL server的数据恢复 关于分辨率的问题。 在vb.net中能做dll吗?请大家可参与 下面的函数怎样声明? 能直接用alter语句修改某个字段的类型和长度吗? 如何做pci 插卡? 关于datalist绑定问题 我的前途???欢迎大家发表意见! 急求 如何测试asp ■■■■为防止下一场水园恶战,水源马甲联盟再次公开马甲id 密码■■■■ 自定义对象的实例怎么在ViewState里保存 把資料漚出成txt,doc,xls格式的文件,在漚出過程中,但是漚出成xls(Office2000)正常,officexp就出現亂碼? citrix数据引擎是什么? 刚刚我和她分手了 在數據窗口中怎樣打印jpg文件 为什么我的pws安装时提示需要winsock32?? 深圳一名女子地铁站台上大便后离去戛纳电影节搞笑瞬间 大牌女星裤子脱落《富春》林志玲上演浴室诱惑 刘德华成姚笛任重520微博示爱恋情疑似曝光马伊琍带父母抱女儿举家出游 丈夫文章霍思燕黄奕娱乐圈冤家对头女脸蛋身材P娱乐圈那些过度衰老的女星陶喆自认中文差 只会电脑打字不会写女星萧蔷衰老过度 面色凹陷凸颧骨揭秘法国隆胸硅胶生产全程《不二神探》"那些年&qu长春售楼处惊现泳装女 购房者瞠目郑秀文兴奋快走戛纳红地毯 刘德华为新李泉与黄龄恋情疑曝光 年纪相差18岁基努-里维斯爆肥亮相 粉丝大呼“你肿刘德华为一岁爱女订购私人飞机 与成龙杨千嬅称爱子牙牙学语可爱 教其习惯被陈乔恩粉色抹胸裙性感露乳沟 惊艳红毯10大漂亮女星打瘦脸针前后容颜大比拼李泉与黄龄恋情疑曝光 年纪相差18岁佘诗曼与好姐妹赴台搞生日派对 吃生蚝港府官员就高铁工程延误致歉 梁振英:美空军飞超2千公里救援中国渔民 7人“驻点四解决”架起“理解桥”永年:重大民生决策广纳民意中国海军十年走完美国海军三十年的路桂林至高雄航线将开通“北京周”在台精彩呈现新闻现场:青岛舰上一日见闻北海舰队的“军事外交”履历鸡泽“1+N”型党支部服务组织实现全河北省严禁在城市公园和风景名胜区内设四川载19名学生中巴车坠崖 3人重伤马来西亚首次跌出大陆出境游热门目的地贵州银行安顺支行累计放贷超20亿元省食品药品安全建设发展促进会携手申银务川开办纳税人实体学校“最窄公交站”只剩立锥之地李克强与埃塞俄比亚总理海尔马里亚姆举专家:五大技术影响国防 下一代战争将彭浩翔拒删杜汶泽戏份:不想见他可以遮南京一小区拆违建 户主持刀与城管对峙
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘