开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1103|回复: 0
收起左侧

[其它] VB中open文件操作的两种方式

[复制链接]

发表于 2013-1-30 16:12:21 | 显示全部楼层 |阅读模式   山东省聊城市
·                                 文本文件的操作
此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有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
·                                 二进制文件的操作
    所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以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
文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行GetPut罢了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表