重点讲解VB.NET二进制文件操作
创始人
2024-06-10 10:21:46
0

VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET二进制文件。大家都知道所有文件的存储其实质都是二进制的,VB.NET二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以BMP等图象文件为例,它们的文件头中存放了是何种图形格式、图象大小、调色板等信息,要显示图象时先读取文件头以获得文件的详细信息,然后再按其格式把图象内容显示出来。用二进制方式可以操作任何的文件,当然至关重要的一点是要清楚了解所操作文件的文件头结构。
#T#VB.NET二进制文件操作主要应用的方法和函数有:Open,Close,Get,Put等。

Open:在For后面的打开模式要用Binary。
Close:关闭文件。
Get:在指定位置取得文件的内容,如果省略位置则从当前位置读取。
Put:在指定位置写入文件,如果省略位置参数就从当前位置写。

下面结合代码讲解VB.NET二进制文件的操作

下述程序完成了将两个文件结合成一个文件以及将这个结合后的文件再拆分成原来的两个文件。文件头的结构是自己定义的,非常简单,共8个字节(也就是两个长整型的长度),前4个字节存放***个文件的长度,后4个字节存放第二个文件的长度。为了更直观地表达文件的结构,现假设有两个文件,***个文件长度是100字节,第二个文件是200字节,那么合并后得到的文件应该是308字节。按顺序来看,文件的结构是:

4***文件的长度
4第二文件的长度
100***文件的二进制内容
200第二文件的二进制内容

除了文件头的8字节长度是固定的后面的长度都会因文件的不同而变化的。

  1. ‘实现文件的合并  
  2. Private Sub MergeFile()  
  3. Dim strFileName1 As String '***个文件  
  4. Dim strFileName2 As String '第二个文件  
  5. Dim strOutput As String '合并后的文件  
  6. Dim aryContent() As Byte '用来读取文件的数组,每次读取前要重定义  
  7. strFileName1 = "c:\a.bmp" 
  8. strFileName2 = "c:\.bmp" 
  9. strOutput = "c:\out.bmp" 
  10. '注意下面三个Open语句都是用Binary模式打开的  
  11. Open strOutput For Binary As #100  
  12. Open strFileName1 For Binary As #1  
  13. Open strFileName2 For Binary As #2  
  14. Put #100, , LOF(1) '取得***文件的长度,并把它写入到合并文件的文件头中  
  15. Put #100, , LOF(2) '取得第二文件的长度,并写入到合并文件的文件头中  
  16. ReDim aryContent(LOF(1) - 1) '重定义数组,为读取文件做准备  
  17. Get #1, , aryContent() '取得***文件的内容到数组  
  18. Put #100, , aryContent() '把***文件的内容写到合并文件中  
  19. ReDim aryContent(LOF(2) - 1)  
  20. Get #2, , aryContent()  
  21. Put #100, , aryContent()  
  22. '关闭文件  
  23. Close #1  
  24. Close #2  
  25. Close #100  
  26. End Sub  
  27. ‘实现文件的拆分  
  28. Private Sub SplitFile()  
  29. Dim strFileName1 As String  
  30. Dim strFileName2 As String  
  31. Dim strFileSplit As String  
  32. Dim aryContent() As Byte  
  33. Dim lngLOF(1) As Long '存放从文件头取得的两个文件的长度  
  34. strFileName1 = "c:\a2.bmp" 
  35. strFileName2 = "c:\2.bmp" 
  36. strFileSplit = "c:\out.bmp" 
  37. Open strFileSplit For Binary As #100  
  38. Get #100, , lngLOF(0) '取得***文件的长度  
  39. Get #100, , lngLOF(1) '第二文件的长度  
  40. Open strFileName1 For Binary As #1  
  41. Open strFileName2 For Binary As #2  
  42. ReDim aryContent(lngLOF(0)-1) '用***文件的长度重定义数组,为读取***文件做准备  
  43. Get #100, 9, aryContent() '从第9字节,即文件后面开始读取***文件的内容  
  44. Put #1, , aryContent() '把取得的内容写入到拆分文件中  
  45. ReDim aryContent(lngLOF(1)-1)  
  46. Get #100, 9 + lngLOF(0) + 1, aryContent() '从第9字节再加上***文件的长度处开始读取第二文件的内容,这里可以清楚地看到文件头的作用了  
  47. Put #2, , aryContent  
  48. Close #1  
  49. Close #2  
  50. Close #100  
  51. MsgBox "拆分完成。", vbInformation 

文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行Get、Put罢了。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...