计算机学习积累

----转载有理,转载是想研究,想研究才会看,看了才会有感想,转载后我有时会写一些自己的感受
数据加载中……

VB中文件操作的两种方式



1.文本文件的操作
 

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

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

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

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

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

例如:

     Dim strFileName As String '文件名 
    
Dim  lngHandle  As   Long   ' 文件句柄 
    
Dim  strAll  As   String   ' 所读取的文本文件的所有内容 
    
Dim  strLine  As   String   ' 在循环中存放每行的内容 
    
    strFileName 
=   " c:\b.txt " 
    
' 获得文件的句柄 
    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:\w.txt " 
    lngHandle 
=  FreeFile()  ' 取得句柄 

    
' 准备要写入的内容 
    strWrite 
=   " 落日楼头,断鸿声里,江南游子。把吴钩看了,栏干拍遍,无人会、登临意。 "   
    Open strFileName 
For  Output  As  lngHandle     ' 打开文件 
    Print #lngHandle, strWrite    
' 写入文本 
    Close lngHandle    
' 关闭文件 
MsgBox   " 写入完成。 " , vbInformation

常用到的一个函数,用来写日志用:

Sub  setLog(str  As   String )
' ---------
'
写日志
'
---------
Open App.Path 
&   " \log\ "   &   CStr ( Date &   " _log.txt "   For  Append  As  # 1
Write #
1 , str
Close #
1
End Sub


二进制文件的操作
 

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

   

    VB中二进制文件操作主要应用的方法和函数有:Open,Close,Get,Put等。

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

Close:关闭文件。

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

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

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

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

4第一文件的长度

4第二文件的长度

100第一文件的二进制内容

200第二文件的二进制内容

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

‘实现文件的合并

 

Private   Sub  MergeFile()

    
Dim  strFileName1  As   String   ' 第一个文件 

    
Dim  strFileName2  As   String   ' 第二个文件 
    
Dim  strOutput  As   String   ' 合并后的文件 
    
Dim  aryContent()  As   Byte   ' 用来读取文件的数组,每次读取前要重定义 
   
    strFileName1 
=   " c:\a.bmp " 
    strFileName2 
=   " c:\b.bmp " 
    strOutput 
=   " c:\out.bmp " 

    
' 注意下面三个Open语句都是用Binary模式打开的 
    Open strOutput 
For  Binary  As  # 100    
    Open strFileName1 
For  Binary  As  # 1 
    Open strFileName2 
For  Binary  As  # 2 

    Put #
100 , , LOF( 1 ' 取得第一文件的长度,并把它写入到合并文件的文件头中 
    Put #
100 , , LOF( 2 ' 取得第二文件的长度,并写入到合并文件的文件头中 

    
ReDim  aryContent(LOF( 1 -   1 ' 重定义数组,为读取文件做准备 
    
Get  # 1 , , aryContent()  ' 取得第一文件的内容到数组 

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

    
ReDim  aryContent(LOF( 2 -   1 )

    
Get  # 2
, , aryContent()
    Put #
100
, , aryContent()

    
' 关闭文件 

    Close #
1 
    Close #
2 
    Close #
100
End Sub
实现文件的拆分
Private   Sub  SplitFile()

    
Dim  strFileName1  As   String 

    
Dim  strFileName2  As   String 
    
Dim  strFileSplit  As   String 
    
Dim  aryContent()  As   Byte 
    
Dim  lngLOF( 1 As   Long   ' 存放从文件头取得的两个文件的长度
    strFileName1 
=   " c:\a2.bmp " 
    strFileName2 
=   " c:\b2.bmp " 
    strFileSplit 
=   " c:\out.bmp " 

    Open strFileSplit 
For  Binary  As  # 100 

    
Get  # 100 , , lngLOF( 0 ' 取得第一文件的长度 
    
Get  # 100 , , lngLOF( 1 ' 第二文件的长度 

    Open strFileName1 
For  Binary  As  # 1 
    Open strFileName2 
For  Binary  As  # 2 

    
ReDim  aryContent(lngLOF( 0 ) - 1 ' 用第一文件的长度重定义数组,为读取第一文件做准备 
    
Get  # 100 9 , aryContent()  ' 从第9字节,即文件后面开始读取第一文件的内容 
    Put #
1 , , aryContent()  ' 把取得的内容写入到拆分文件中 

    
ReDim  aryContent(lngLOF( 1 ) - 1 )

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


    Put #
2 , , aryContent

    Close #
1 

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

posted on 2006-07-15 13:35 freebird 阅读(320) 评论(0)  编辑  收藏 所属分类: vb


只有注册用户登录后才能发表评论。


网站导航: