按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
进制访问
MsgBox 〃Total bytes: 〃 & LOF(1) 显示打开文件的字节数(该文件现在为空)
fname = 〃Julitta〃 给变量fname赋值
ln = len(fname) 将储存于变量fname的字符串长度赋予变量In
Put #1; ; ln 将变量In的内容放置在二进制文件的下一个字
节
MsgBox 〃The last byte: 〃 & LOC(1) 显示最后一个字节的位置
Put #1; ; fname 在下一个位置放置变量fname的内容
lname = 〃Korol〃 给变量lname赋值
ln = len(lname) 将储存于变量lname的字符串长度赋予变量In
Put #1 ; ;ln 将变量In的数值输入到二进制文件的下一个字
节
Put #1;;lname 在下一个位置放置变量lname的内容
MsgBox 〃The last byte: 〃 & LOC(1) 显示最后一个字节的位置
Get #1;1; entry1 读取第一个字节位置的数值并将其赋予变量
entry1。
MsgBox entry1 显示变量entry1的内容
Get #1; ; entry2 读取下一个位置的数值并将其赋予变量
entry2。
MsgBox entry2 显示变量entry2的内容
Get #1; ; entry3 读取下一个位置的数值并将其赋予变量
entry3。
MsgBox entry3 显示变量entry3的内容
Get #1; ; entry4 读取下一个位置的数值并将其赋予变量
entry4。
MsgBox entry4 显示变量entry4的内容
Debug。Print 将所有数据打印在立即窗口
entry1;entry2;entry3;entry4
7 Julitta 5 Korol 立即窗口里显示的上条指令的结果
Close #1 关闭文件
152
… 页面 169…
注意,上面的质量可以在CD里的过程EnterAndDisplay里找到。
当往二进制文件输入数据时,请遵循下述指导:
* 在往二进制文件写入字符串之前,将该字符串的长度赋予一个整型变量,通常可以使用下述代
码块:
字符串长度 = Len(变量名称)
Put #1; ; 字符串长度
Put #1; ; 变量名称
* 当你从二进制文件读取数据时,先得读取该字符串长度,然后才是字符串内容。可以使用Get
语句和String函数来实现:
Get #1; ; 字符串长度
变量名称=String(字符串长度; 〃 〃)
Get #1; ; 变量名称
技巧8…11 二进制文件的优势与劣势
与顺序文件和随机文件相比,二进制文件是最小的,因为它使用变化长度的记录,可以保存硬盘空
间。和随机访问文件一样,你可以同时读写二进制文件。二进制文件的一个最大的不好之处就是你
必须要准确地知道你要找回或者要操作的数据是如何储存在文件里的。
23。操作文件和文件夹的时髦方法
在你的电脑上有一个被隐藏的宝贝叫做Windows Scripting Host(WSH视窗脚本主机),它允许你创
建一些程序,可以控制视窗操作系统和它的应用程序,以及从操作系统找回信息。WSH是一种ActiveX
控件,可以在文件Wshom。ocx里找到。如果你正在使用Windows 95,98,NT5。0,2000,XP或者IE4,
5或者6的话,该文件就会自动安装在Windows System32文件夹里面。
WSH是一种脚本语言。脚本语言是指可以自动运行的一套命令。可以使用mand Scripting Host
(Cscript。exe)从命令提示,或者使用Windows Scripting Host (Wscript。exe)从视窗直接创建或
者运行脚本。在本章接下来的本分,你将学习WSH如何和VBA结合工作的。
WSH有它自己的对象层次。使用CreatObject函数,你可以在VBA过程里引用WSH对象。在开始编写使
用WSH的VBA过程之前,我们来看看你将能控制的一些对象。
153
… 页面 170…
图8…5 WSH是一个ActiveX控件,用来创建一些进行简单或复杂操作的脚本,而这种工作在早前的
MS…DOS操作系统里是有Writing batch文件(。bat)来完成的
1。 在VB编辑器窗口,选择“工具”…“引用”
2。 在引用对话框,找到并选择Microsoft Scripting Runtime
图8…6 对Microsoft Scripting Runtime创建引用
3。 现在,按下F2打开对象浏览器
154
… 页面 171…
4。 在“所有库”的下拉列表里选择“Scripting”。你将看到WSH库里面的部分对象列表。WSH让你
轻易的获得一些问题的答案,例如“在哪个硬盘上我可以找到某个文件?”(GetDrive方法),
“某文件的扩展名是什么?”(GetExtensionName方法),“该文件最后一次修改在什么时候?”
(DateLastModified属性)以及“在给定的硬盘上存在某个文件夹或者文件吗?”(FolderExists
和FileExists方法)。
图8…7 创建对Microsoft Scripting Runtime的引用之后(见图8…6),对象浏览器显示了很多对象,
让你使用硬盘,文件夹,文件和其它内容。
24。使用 WSH 获取文件信息
WSH有个对象叫做FileSystemObject,该对象有好几种方法来操纵文件系统。我们来看看你如何获
取某个特定文件的信息:
1。 在当前工程里插入一新模块,并重命名为WSH
2。 在模块WSH里,输入下述过程FileInfo:
Sub FileInfo()
Dim fs As Object
Dim objFile As Object
Dim strMsg As String
Set fs = CreateObject(〃Scripting。FileSystemObject〃)
Set objFile = fs。GetFile(〃C:WINNTSystem。ini〃) ‘ 译 者 : 有 的 可 能 是
C:WindowsSystem。ini
strMsg = 〃File name: 〃 & _
objFile。Name & vbCrLf
strMsg = strMsg & 〃Disk: 〃 & _
objFile。Drive & vbCrLf
strMsg = strMsg & 〃Date Created:〃 & _
155
… 页面 172…
objFile。DateCreated & vbCrLf
strMsg = strMsg & 〃Date Modified:〃 & _
objFile。DateLastModified & vbCrLf
MsgBox strMsg; ; 〃File Information〃
End Sub
上面显示的过程FileInfo使用VBA函数CreateObject来创建一个ActiveX对象(FileSystemObject),
该对象提供访问电脑文件系统的路径
Dim fs As Object
Set fs = CreateObject(〃Scripting。FileSystemObject〃)
上面的代码声明了一个对象变量,名为fs。然后使用函数CreateObject创建一个ActiveX对象并且
将该对象赋予对象变量。上面程序的第二行代码
Set objFile = fs。GetFile(〃C:WINNTSystem。ini〃);
创建和返回对C:、WINNT的System。ini文件对象的引用,并且将其赋值给对象变量objFile。你可以
读取File对象的很多属性,例如,objFile。Name语句返回该文件的完整文件名,语句objFile。Drive
返回该文件所处的硬盘名称,语句objFile。DateCreated和objFile。DateLastModified分别返回该
文件的创建日期和最后一次修改日期。这个程序可以容易地修改成返回文件类型,属性和它的父文
件夹的名称。请试图使用下述指令你自己修改该过程:objFile。Type; objFile。Attributes;
objFile。ParentFolder以及 objFile。Size。在对象浏览器里面点击File对象,看看关于文件,你
还可以学习到别的什么。
25。FileSystemObjec 的方法和属性
FileSystemObjedt是个ActiveX控件,提供了到计算机文件系统的访问。该对象提供了很多种方法,
表8…3里面列出了其中的一些。
方法 描述
FileExists 如果文件存在就返回True
Sub FileExists()
Dim fs As Object
Dim strFile As String
Set fs =
CreateObject(〃Scripting。FileSystemObject〃)
strFile = InputBox(〃Enter the full name of the
file:〃)
If fs。FileExists(strFile) Then
MsgBox strFile & 〃 was found。〃
Else
MsgBox 〃File does not exist。〃
End If
End Sub
GetFile 返回一对象File
GetFileName 返回带路径文件名
GetFileVersion 返回文件版本
CopyFile 复制文件
Sub CopyFile()
Dim fs As Object
Dim strFile As String
Dim strNewFile As String
strFile = 〃C:Hello。doc〃
strNewFile = 〃C:Program FilesHello。doc〃
Set fs =
156
… 页面 173…
CreateObject(〃Scripting。FileSystemObject〃)
fspyFile strFile; strNewFile
MsgBox 〃A copy of the specified file was
created。〃
Set fs = Nothing
End Sub
MoveFile 移动文件
DeleteFile 删除文件
Sub DeleteFile()
Dim fs As FileSystemObject
Set fs = New FileSystemObject
fs。DeleteFile 〃C:Program FilesHello。doc〃
MsgBox 〃The requested file was deleted。〃
End Sub
DriveExists 如给定硬盘存在则返回True
Function DriveExists(disk)
Dim fs As Object
Dim strMsg As String
Set fs =
CreateObject(〃Scripting。FileSystemObject〃)
If fs。DriveExists(disk) Then
strMsg = 〃Drive 〃 & UCase(disk) & 〃 exists。〃
Else
strMsg = UCase(disk) & 〃 was not found。〃
End If
DriveExists = strMsg
' run this function from the worksheet
' by entering in any cell the following:
=DriveExists(〃E:”)
End Function
GetDrive 返回对象Drive
Sub DriveInfo()
Dim fs; disk; infoStr; strDiskName
strDiskName = InputBox(〃Enter the drive
letter:〃; _
〃Drive Name〃; 〃C:”)
Set fs =
CreateObject(〃Scripting。FileSystemObject〃)
Set disk =
fs。GetDrive(fs。GetDriveName(strDiskName))
infoStr = 〃Drive: 〃 & UCase(strDiskName) &
vbCrLf
infoStr = infoStr & 〃Drive letter: 〃 & _
UCase(disk。DriveLetter) & vbCrLf
infoStr = infoStr & 〃Drive Type: 〃 &
disk。DriveType & vbC