VB中文件操作的两种方式

2016-02-19 21:46 28 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的VB中文件操作的两种方式,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

  文本文件的操作 

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

  代码示例:

    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)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

    Put #2, , aryContent   

    Close #1

    Close #2

    Close #100  

    MsgBox "拆分完成。", vbInformation

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

来源:http://www.tulaoshi.com/n/20160219/1627121.html

延伸阅读
代码如下: package com.demos; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class GetScreenActivity extends Activity { private Button firstBtn = null; private Button secBtn = null; @Override pr...
标签: Web开发
之前实现AJAX使用Javascript脚本一个一个敲出来的,很繁琐。学习Jquery之后就感觉实现AJAX并不是那么的困难了,当然除了Jquery框架外还有其它的优秀框架这里我就着重说下比较流行的Jquery。Jquery AJAX提交表单有两种方式,一是url参数提交数据,二是form提交(和平常一样在后台可以获取到Form表单的值)。在所要提交的表单中,如果元素很多的话...
导读:本文主要讨论手机手机客户端的两种主要的界面布局与设计方式,对于手机设计师来说,此类文章比较少见,当然其中对于用于体验与可用性的实现依然很普遍。 手机产品设计与传统的桌面和web产品设计相比,最显著的约束是 设计空间的急剧缩小 。打个比方,这就像从一个100平米的房子搬到5平米的单间,东西没少一样,可以施展的空间却小了几十...
  出处: 蓝森林 本文就两类常见启动问题:Lilo失效和忘记root口令提出若干解决方法: Lilo失效有五种参考方法: 1、如果有启动软盘,用它启动后,运行lilo,重启。 2、红旗下通过:用安装光盘引导系统。在安装向导开始后,我们即可溜到另一个控制台下(按Ctrl+Alt+F2),将看到bash#字样。如果你Linux的/分区是对...
标签: 营养价值
椰子在热带是很常见的一种水果,对于我们北方人应该很少吃椰子,椰子是有很多营养的,它含有很高的碳水化合物和蛋白质,能够对我们的身体起到很好的滋补作用,特别是夏天吃椰子也能够很好的止渴,可是椰子怎么吃,我们应该了解的不多,即使买了椰子也不知道该怎么吃。 在南方椰子是很常见的,他们对于椰子的吃法会更了解,但是对于北...

经验教程

384

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部