电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

VB中文件操作的两种方式


发布日期:2021/9/4
 

文本文件的操作

此种方式是以行为单位进行读取的基本单位主要应用的方法和函数有OpenCloseLine InputFreeFileEOF等下面先简述其功能然后结合代码示例进行说明

Open:顾名思义它的作用是打开文件换而言之打开某个文件就是获得某个的控制权一般情况下当文件处于打开状态时只有打开者才能对它进行操作打开文件时要指定一个整数作为文件号以后的操作都是针对这个代号进行的而不是针对文件名文件号也叫句柄在程序中一个文件号只能指向一个文件不能出现两个文件同时具有相同句柄的情况

Close:关闭文件即释放文件的控制权

Line Input:以行为单位取得文件内容以行为单位是指从当前位置开始到下一个换行符为止的内容换行符是Chr() & Chr()两个字节组成VB中已定义了常量vbCrLf可直接使用要注意的是Line Input读取一行时会把行尾的换行符去掉因此我们在读取每行内容时要记得补上换行符才能保持得到的内容与文件一致

FreeFile:得到空闲的文件号用这个函数取得文件号可以避免文件号的沖突

例如

Dim strFileName As String 文件名

Dim lngHandle As Long 文件句柄

Dim strAll As String 所读取的文本文件的所有内容

Dim strLine As String 在循环中存放每行的内容

strFileName = c:\btxt

获得文件的句柄

lngHandle = FreeFile()

For后面的参数表示以何种方式打开文件Input是读取Output是覆盖写入Append是追加写入

Open strFileName For Input As lngHandle

循环直到文件尾

Do While Not EOF(lngHandle)

每次读取一行存放在strLine变量中

Line Input #lngHandle strLine

每次读取都把所读到的内容连接到strAll变量由于Line Input去掉了换行符所以这里补上

strAll = strAll & strLine & vbCrLf

Loop

显示得到的全部分内容

MsgBox strAll vbInformation

对文本文件的写入相对简单些有三个步骤打开文件写入文本关闭文件

代码示例

Dim strFileName As String 文件名

Dim lngHandle As Long 句柄

Dim strWrite As String 要写入的文本内容

strFileName = c:\wtxt

lngHandle = FreeFile() 取得句柄

准备要写入的内容

strWrite = 落日楼头断鸿声里江南游子把吴钩看了栏干拍遍无人会登临意

Open strFileName For Output As lngHandle 打开文件

Print #lngHandle strWrite 写入文本

Close lngHandle 关闭文件

MsgBox 写入完成 vbInformation

二进制文件的操作

所有文件的存储其实质都是二进制的二进制文件往往由两部分组成一部分是文件头另一部分存放了文件的内容文件头通常存放与文件格式有关的信息以BMP等图象文件为例它们的文件头中存放了是何种图形格式图象大小调色板等信息要显示图象时先读取文件头以获得文件的详细信息然后再按其格式把图象内容显示出来用二进制方式可以操作任何的文件当然至关重要的一点是要清楚了解所操作文件的文件头结构

VB中二进制文件操作主要应用的方法和函数有OpenCloseGetPut等

Open:在For后面的打开模式要用Binary

Close:关闭文件

Get:在指定位置取得文件的内容如果省略位置则从当前位置读取

Put:在指定位置写入文件如果省略位置参数就从当前位置写

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

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

第一文件的长度

第二文件的长度

第一文件的二进制内容

第二文件的二进制内容

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

实现文件的合并

Private Sub MergeFile()

Dim strFileName As String 第一个文件

Dim strFileName As String 第二个文件

Dim strOutput As String 合并后的文件

Dim aryContent() As Byte 用来读取文件的数组每次读取前要重定义

strFileName = c:\abmp

strFileName = c:\bbmp

strOutput = c:\outbmp

注意下面三个Open语句都是用Binary模式打开的

Open strOutput For Binary As #

Open strFileName For Binary As #

Open strFileName For Binary As #

Put # LOF(取得第一文件的长度并把它写入到合并文件的文件头中

Put # LOF(取得第二文件的长度并写入到合并文件的文件头中

ReDim aryContent(LOF( 重定义数组为读取文件做准备

Get # aryContent() 取得第一文件的内容到数组

Put # aryContent() 把第一文件的内容写到合并文件中

ReDim aryContent(LOF(

Get # aryContent()

Put # aryContent()

关闭文件

Close #

Close #

Close #

End Sub

实现文件的拆分

Private Sub SplitFile()

Dim strFileName As String

Dim strFileName As String

Dim strFileSplit As String

Dim aryContent() As Byte

Dim lngLOF() As Long 存放从文件头取得的两个文件的长度

strFileName = c:\abmp

strFileName = c:\bbmp

strFileSplit = c:\outbmp

Open strFileSplit For Binary As #

Get # lngLOF(取得第一文件的长度

Get # lngLOF(第二文件的长度

Open strFileName For Binary As #

Open strFileName For Binary As #

ReDim aryContent(lngLOF(用第一文件的长度重定义数组为读取第一文件做准备

Get # aryContent() 从第字节即文件后面开始读取第一文件的内容

Put # aryContent() 把取得的内容写入到拆分文件中

ReDim aryContent(lngLOF(

Get # + lngLOF() + aryContent() 从第字节再加上第一文件的长度处开始读取第二文件的内容这里可以清楚地看到文件头的作用了

Put # aryContent

Close #

Close #

Close #

MsgBox 拆分完成 vbInformation

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

上一篇:使命必达: 深入剖析WCF的可靠会话

下一篇:IE中屏蔽网页图片工具栏的方法