VB中文件操作的两种方式

转载 2006年05月28日 10:59:00
文本文件的操作

 

此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有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:/.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


二进制文件的操作

所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以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:/.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:/2.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罢了。
Feedback
# re: VB中文件操作的两种方式
2005-03-17 08:20 by Ray
你好,夜的影子;我用你的这个程序合并文件;怎么合成的文件全是乱码?

能帮我一下吗?
# re:Ray
2005-03-17 08:44 by 夜的影子
我只是转贴这些文件,以后用的时候好找,并不是我写的,不过你说是乱码,你弄得是什么文件?把你的代码给我看看?
这几天比较忙,你用十六进制打开你的文件,看看和源文件有哪些不同,哪里出的问题~~
其实二进制操作文件很简单的。
# re: VB中文件操作的两种方式
2005-03-17 16:34 by ray
谢谢你的回复!
我合并的是两个dat文档;现在已经可以了,

我把下面的两行去掉就行了

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

Get #100, , lngLOF(1) '第二文件的长度 

VB中文件操作的两种方式

文本文件的操作  此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有Open,Close,Line Input,FreeFile,EOF等。下面先简述其功能然后结合代...
  • guyehanxinlei
  • guyehanxinlei
  • 2007年06月02日 13:44
  • 715

android系统的四种文件操作模式

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被该应用访问,在该模式下,写入的内容会覆盖源文件的内容; Context.MODE_APPEND:为追加操作模式,...
  • jjarchu
  • jjarchu
  • 2016年07月07日 20:15
  • 451

VB中文件操作的两种方式

VB中文件操作的两种方式 作者:不详  来源于:中国VB网  发布时间:2006-4-30 ...
  • inrgs
  • inrgs
  • 2007年01月26日 18:07
  • 1271

VB常用文件操作类

最近经常看到有网友问到VB文件操作相关的,正好以前写程序自己封装了一个类,希望能给大家一些帮助。当中难免存在问题希望大家修改并完善。 Option   Explicit "**************...
  • chenhui530
  • chenhui530
  • 2007年10月02日 15:32
  • 3876

VB操作文件实例

文件操作分为两种方式,一种为顺序操作文件,另一种为随机操作文件,顺序就是从头至尾一行一行的操作,随机就是将文件的内容分为一块一块的,然后操作, 第一种:顺序文件 一、新建文本demo.txt文件并且写...
  • ZWyanqing
  • ZWyanqing
  • 2017年09月26日 10:16
  • 423

自定义异常的两种处理方式实现

public class NewExceptionTest { public void method(String str)throws NewException { if(str==null...
  • u012575573
  • u012575573
  • 2014年05月06日 10:58
  • 314

Spring中依赖注入的两种方式的区别

1:Spring中依赖注入的两种方式:  (1):通过 setter 方法注入:                 其中,name属性的取值依setter方法名而定,要求这个类里面这...
  • StarskyBoy
  • StarskyBoy
  • 2016年08月22日 11:44
  • 2718

Java中Map集合的两种遍历方式

Map集合的第一种遍历方式:
  • lzm1340458776
  • lzm1340458776
  • 2014年05月17日 12:07
  • 1758

VB - 数据文件(二)随机文件及文件基本操作

随机文件  随机文件中每一个记录定长,并设置记录号,记录号从1开始。             存取记录时,只要说明所需记录的编号,系统就以此算出记录所在位置,然后加以写入或读出 初步认识 ...
  • alexbnlee
  • alexbnlee
  • 2011年11月04日 17:31
  • 6029

对servlet两种跳转方式的深刻探讨

servlet 跳转 jsp页面 服务端跳转 客户端跳转
  • liu_005
  • liu_005
  • 2015年10月22日 15:41
  • 2242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB中文件操作的两种方式
举报原因:
原因补充:

(最多只允许输入30个字)