open语句对文本和二进制文件的读写
文本文件的操作
此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有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
open语句对文本和二进制文件的读写的更多相关文章
- 从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写
一.文件的读写 如前面所提,流的读写主要有<<, >>, get, put, read, write 等操作,ofstream 继承自ostream, ifstream 继承自 ...
- C++学习49 对二进制文件的读写操作
二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文 ...
- JDBC处理文本和二进制文件
JDBC支持文本(CLOB)和二进制(BLOB)文件的处理,比如要往数据库里存取文章或者图片.这都是用流的思想来解决的. 来两个Demo看看JDBC是怎么操作文本和二进制文件的. CLOB: pack ...
- 简单Java程序向实用程序的过度:二进制文件的读写
File I/O中常见的文件读写: 1.字节流读写文本文件 FileInputStream; FileOutputStream; 2.字符流读写文本文件 FileReader; FileWriter; ...
- 原 BinaryWriter和BinaryReader(二进制文件的读写)
原文 BinaryWriter和BinaryReader(二进制文件的读写) C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 ...
- Java -- JDBC mysql读写大数据,文本 和 二进制文件
1. 往mysql中读写字符文本 public class Demo1 { /* 创建数据库 create database LOBTest; use LOBTest; create table te ...
- C++入门到理解之文件操作(文本文件的读写+二进制文件的读写)
原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存. 2. ...
- C++文本处理_文件读写
QT在进行文本读写时和C++一样,是基于文本流操作的. QT在读取全部文本时,相对比较便捷.使用readAll()函数,配合split()进行分隔符的拆分(例如行结束符"\n"), ...
- C#二进制文件的读写
sing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using ...
随机推荐
- MyBatise代码自动生成时候Oralce的number类型BigDecimal问题
使用MyBatise的代码自动生成工具时候,即便在配置文件中定义了 <javaTypeResolver> <property name="forceBigDecimals& ...
- HDU 4633 Who's Aunt Zhang ★(Polya定理 + 除法取模)
题意 用K个颜色给魔方染色,魔方只能整体旋转并且旋转重合的方案算一种,求一共有多少不同的染色方案. 思路 经典的Polya应用,记住正六面体的置换群就可以了,魔方就是每个大面变成9个小面了而已: 本题 ...
- Dlib——C++机器学习库,有传统机器学习的,也有深度学习的
Dlib的目标用户并没有Hyperopt-sklearn细分,它是一个基于C++语言的通用的机器学习和数据分析库.值得一提的是,虽然Dlib的确是由C++实现的,但它却提供了针对Python语言的AP ...
- 《免费前端教程不会告诉你这些》知乎LIVE读后感
这个是昨天偶然间在知乎上看到的一个知乎LIVE,答题就是音频在线直播吧,我试听了一下觉得分享的还不错,就买了完整的.主讲人叫方应杭,貌似是个挺牛逼的程序猿,之前没有听过,但这是个典型的科班出生的程序员 ...
- JavaScript学习总结(二十一)——使用JavaScript的数组实现数据结构中的队列与堆栈
今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被 ...
- 抽象工厂 C++实现
抽象工厂(Abstract Factory) 抽象工厂是为了提供一系列相关或相互依赖对象的接口.对象创建型模式的一种. 客户Client 抽象工厂接口AbstractFactory 抽象工厂的实现类C ...
- Fedora BCM43142 无线网卡驱动安装
OS:Fedora 25 KDE 系统内核:4.10.16-200.fc25.x86_64 #1 网卡:BCM43142 1.识别自己的网卡型号:命令:lspci | grep -i broadcom ...
- 硬盘安装CentOS 6.0(超级详细图文教程)
硬盘安装CentOS 6.0(超级详细图文教程) 来源: 引言: 电脑系统是Windows XP,电脑没有光驱.手头没有U盘.没有移动硬盘.电脑主板不支持U盘启动,在这种情况下想安装CentOS ...
- Yii 入门
跳转到不同module Redirect to module after login Yii $this->redirect( array('/tradesman/default/index') ...
- 《次元唤醒 需求规格说明书v1.0》
一.团队分工 组员 工作比例 参与范围 王诚荣 17% 原型设计,需求规格说明书整合,LOGO设计 马祎特 22% PPT制作,演讲,博客模板,用户描述 陈斌 21% 评审表格制作,引言,项目描述,功 ...