a.Close
Debug.Print retstring '可看到读取了第一行的字符 End Sub ·ReadLine 方法
语法:object.ReadLine
功能:从一个 TextStream 文件读取一整行(到换行符但不包括换行符)并返回得到的字符串。 示例:
Sub du_line()
Dim fso, a, retstring Const ForReading = 1
Set fso = CreateObject(\
Set a = fso.OpenTextFile(\
Do While a.AtEndOfStream <> True '是否在 TextStream 文件末尾 retstring = a.ReadLine '读取一行
Debug.Print retstring '显示在立即窗口 Loop a.Close End Sub ·ReadAll 方法
语法:object.ReadAll
功能:读取整个的 TextStream 文件并返回得到的字符串。 说明:对于大的文件,使用ReadAll方法浪费内存资源。应使用其它的技术去输入一个文件,比如按行读取文件。 示例: Sub du_all()
Dim fso, a, retstring Const ForReading = 1
Set fso = CreateObject(\
Set a = fso.OpenTextFile(\retstring = a.Readall '全部读取 Debug.Print retstring a.Close End Sub
还有两个辅助读取的方法: ·Skip 方法
语法:object.Skip(characters)
功能:当读一个 TextStream 文件时跳过指定数量的字符。 示例:
Sub duskip()
Dim fso, a, retstring Const ForReading = 1
Set fso = CreateObject(\
Set a = fso.OpenTextFile(\
Do While a.AtEndOfLine <> True '是否到行末 retstring = retstring & a.Read(1) '读取一个字符 a.Skip (1) '跳过一个字符 Loop a.Close
Debug.Print retstring '可看到读取了第一行的奇数位的字符 End Sub ·SkipLine 方法
语法:object.SkipLine
功能:当读一个 TextStream 文件时跳过下一行。
3、写入数据到文件
写入数据到文件也有三种方法。 ·Write 方法
语法:object.Write(string)
功能:写一个指定的字符串到一个 TextStream 文件。 示例: Sub xie()
Const ForWriting = 2, ForAppending = 8 Dim fs, f
Set fs = CreateObject(\
Set f = fs.OpenTextFile(\ f.Write \写入字符串 f.Close End Sub ·WriteLine 方法
语法:object.WriteLine([string])
功能:写入一个指定的字符串和换行符到一个 TextStream 文件中。 示例:
f.WriteLine(\写入字符串,加一个换行符。 ·WriteBlankLines 方法
语法:object.WriteBlankLines(lines)
功能:写入指定数量的换行符到一个 TextStream 文件中。 示例:
f.WriteBlankLines(3) '相当于按3次回车。 4、关闭文件
利用TextStream 对象的Close方法,上面的示例中已经有了,很简单。
(七)总结
从上面的介绍,我们看到使用FileSystemObject对象处理文件、文件夹比使用VBA语句的方法具有更容易存在的特点。这是因为FileSystemObject对象使用了面向对象的语法。另外FileSystemObject对象处理文本文件毫不逊色于VBA语句,非常值得推荐。唯一的问题是不能处理二进制文件,微软在有关文档中称计划将来支持二进制文件,不过应该只是计划而已,呵呵。
Excel-VBA操作文件四大方法之四__利用API函数来处理文件
通过前面三种方法的介绍,你是否已经觉得足够了?是的,前面的方法完全可以应付几乎所有的文件操作。但是为了普及一下API,展示一下API的魅力,最后向大家介绍一下如何利用API函数来处理文件。另一方面也是本人对API情有独钟,为她做一下广告,呵呵。 大家对API的强大也是有所耳闻了,在文件操作方面,API自然毫不逊色。
说明:为了文章简洁,我们先给出API函数的名称及功能,其完整的声明及常数就不再一一细诉,只在示例中给出其完整用法。 (一)处理驱动器及目录
下面是windows中提供的对于目录进行操作的API函数及其功能: CreateDirectory,CreateDirectoryEx 创建一个新目录 GetCurrentDirectory 在一个缓冲区中装载当前目录
GetDiskFreeSpace,GetDiskFreeSpaceEx 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量
GetDriveType 判断一个磁盘驱动器的类型 GetFullPathName 获取指定文件的完整路径名
GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母
GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 GetSystemDirectory 这个函数能取得Windows系统目录(System目录)的完整路径名。在这个目录中,包含了所有必要的系统文件。根据微软的标准,其他定制控件和一些共享组件也可放到这个目录。通常应避免在这个目录里创建文件。在网络环境中,往往需要管理员权限才可对这个目录进行写操作
GetTempPath 获取为临时文件指定的路径
GetVolumeInformation 获取与一个磁盘卷有关的信息
GetWindowsDirectory 这个函数能获取Windows目录的完整路径名。在这个目录里,保存了大多数windows应用程序文件及初始化文件 RemoveDirectory 删除指定目录 SetCurrentDirectory 设置当前目录
SetVolumeLabel 设置一个磁盘的卷标(Label)
下面通过几个例子来详细的了解一下其中主要的几个函数及其用法: 1、GetLogicalDrives
作用:判断系统中存在哪些逻辑驱动器字母
声明:Declare Function GetLogicalDrives Lib \说明:此函数的返回值类型为Long,这个结构中的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;位1设为1表示存在B:驱动器;以次类推 示例:
Public Sub Get_LogicalDrives()
Dim LDs As Long, Cnt As Long, sDrives As String LDs = GetLogicalDrives sDrives = \ For Cnt = 0 To 25
If (LDs And 2 ^ Cnt) <> 0 Then
sDrives = sDrives + \\ End If Next Cnt MsgBox sDrives End Sub
上面的示例中,我们通过二进制运算,将返回值转换成字符。如果你的机上有C,D,E,F,G,H这几个驱动器,那么LDs的值就是252,转成二进制为11111100,从右往左,依次代表A,B,C,D,...,为0的说明没有此驱动器字母。大家可以自己试一试。 2、GetDriveType
作用:判断一个磁盘驱动器的类型
声明:Declare Function GetDriveType Lib \String) As Long
说明:此函数的返回值类型为Long,如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型:DRIVE_REMOVABLE(表示磁盘可以从驱动器上移走,通常是软驱), DRIVE_FIXED(磁盘不能从驱动器上移走,通常为本地硬盘), DRIVE_REMOTE(驱动器是远程网络驱动器), DRIVE_CDROM(驱动器是CD-ROM驱动器) 或 DRIVE_RAMDISK(驱动器是RAM驱动器) 参数为String类型,包含了驱动器根目录路径的一个字串
此函数的功能与FSO的Drive对象的DriveType属性是一样的。 示例:
\\'定义常数变量
Private Const DRIVE_CDROM = 5 \\'表示光盘驱动器 Private Const DRIVE_FIXED = 3 \\'表示硬盘驱动器 Private Const DRIVE_RAMDISK = 6 \\'表示RAM驱动器 Private Const DRIVE_REMOTE = 4 \\'表示网络驱动器 Private Const DRIVE_REMOVABLE = 2 \\'表示软盘驱动器
Private Sub Get_DriveType() Dim temp As Long
temp = GetDriveType(\\\'取的d:盘驱动器类型 Select Case temp
Case DRIVE_CDROM
MsgBox \光盘驱动器\ Case DRIVE_FIXED
MsgBox \硬盘驱动器\ Case DRIVE_RAMDISK
MsgBox \驱动器\ Case DRIVE_REMOTE
MsgBox \网络驱动器\ Case DRIVE_REMOVABLE
MsgBox \ABLE: 软盘驱动器\ End Select End Sub
3、GetDiskFreeSpaceEx