最简单的方法是使用filesystemobject对象。而它并非VB内置对象,
需引用才可以使用。
1.filesystemObject对象引用
“工程/引用/microsoft scription Runtime”
在对象浏览器窗口中选“scripting”模块,看到增了许多对象,
drive filesystemobject textstream file等
其中filesystemobject是这些对象的关键,想要使用其它对象,
都必须先建立filesystemobject对象。
2.文件存取
dim fs as new filesystemobject 建立filesystemobject对象
dim txtf as textstream 定义了一个textstream对象变量
textstrem对象与文件的读写所有文件都必须先打开,才能读写,
filesystemobjet对象所提供的打开文件的方法有两种:
opentextfile打开文件
createtextfile建立文件
通过filesystemobject所打开的文件是一个TextStream对象,
而通过textstream对象的各种方法和属性,就可以进一步读写文件。
1)opentextfile 方法:打开文件
set textstream对象名=filesystemobject名.opentextfile(文件名,IO模式,是否自动建立文件)
文件名:建议写入完整路径的文件名。
IO模式:可设置成forreading(=1)、forwrting(=2)或forappending(=8)。
如果设置成forreading,则打开的文件是只读的;
如果设置成forwriting,则打开的文件是可写的,而原来文件 的内容会被清除;
如果设置成forappending,则打开的文件是可写的,但原文件 的内容不会被清除,数据会从文件 的最后面开始写入。
参数缺省: 表示forreading 只读。
是否自动建立文件:可设置成true或false。
设置为:true 则当文件不存在时,会自动 建立一个新文件。
设置为:false 则当文件不存在时,就会产生错误。
缺省时:表示为false。
例:将c:\autoexec.bat打开成为只读文件
dim fs as new filesystemobject
dim txtf as textstream
set txtf=fs.opentextfile(“c:\autoexec.bat”)
例:将c:\text.txt打开成“从文件最后面写入的文件”
dim fs as new filesystemobject
dim txtf as textstream
set txtf=fs.opentextfile(“c:\test.txt”,forappending,true)
txtf.close
2)createtextfile 方法:建立文件
set textstream对象名=filesystemobject名.createtextfile(文件名称,是否覆盖原文件)
文件名称:建议写入完整路径的文件名。
是否覆盖原文件:可设置成true或false。可缺省,缺省时是true,覆盖原文件
如果设置成true,则当文件存在的时候,原文将会被破坏,而以新文件所替代。
如果设置成false,则当文件存在时,将会产生错误
例:建立一个c:\text.txt,若c:\test.txt存在,则覆盖它。
dim fs as new filesystemobject
dim txtf as textstream
set txtf=fs.createtextfile(“c:\text.txt”)
3)fileexists 方法:文件是否存在?
为了避免破坏已有的文件,通常会将“是否覆盖原文件”参数设置为false。但是有可能产生错误,如何避免错误,可以先判断文件是否存在,此时调用filesystemobjet 对象的fileexists方法,具体程序如下:
‘fs 为filesystemobject
if fs.fileexists(“c:\test.txt”) then ‘文件已存在
‘其它处理方式
else
set txtf=fs.createtextfile(“c:\text.txt”)
end if
4)readline 和writeline方法:文件的读取与写入
利用createdtextfile和opentextfile所打开(建立)的是文本文件,要存取文本文件,通常采用逐行读取或逐行写入的方式。读取时必须调用textstream对象的readline方法。写入时必须调用writeline方法。
例:
‘txtf 和txtf2均为textstream对象
s=txtf.readline ‘读取一行数据,并设置给s变量
txtf2.writeline s ‘将变量s的数据作为文件一行数据写入
5)atendofstream 属性:文件是否已到末尾?
当读取位置已经到达文件的末尾时,如果再调用readlin读取数据,将会产生错误,为了避免这个错误,必须判断textstream对象的atendofstream属性,如果为true,就表示文件位置已经到达文件末尾,不可以再读数据。
If not txtf.atendofstream then
s=txtf.readline
endif
例:将c:\autoexec.bat文件复制成为c:\autoexec.bak文件
dim fs as new filesystemobject
dim txtf1 as textstream
dim txtf2 as textstream
dim s as string
set txtf1=fs.opentextfile(“c:\autoexec.bat”,forreading,true)
set txtf2=fs.createtextfile(“c:\autoexec.bak”,true)
while not txtf1.atendofstream ‘如果txtf1还没有到达文件末尾
s=txtf1.readline ‘从textf1中读取一行数据
txtf2.writeline s ‘将数据作为txtf2的一行数据写入到文件
wend
txtf1.close
txtf2.close
6)readall 方法:一次读取文件的所有内容
readline方法每次只读取一行数据,readall方法则是一次读取文件的所有内容。
‘txtf 为textstream对象
if not txtf.atendofstream then
text1.text =txtf.readall
end if
end sub
7)read和write方法:文件的读取和写入
read与readline方法最大的不同在于readline每次会读取一行数据,但是read方法则是每次读取N个字符,例如:
n=100
s=txtf.read (n) ‘读取100个字符
如果文件中的字符数不足100,假设只乘下50个字符,那read就会将50个字符全部读取出来。除了读取方式的不同之外,readline只能用来读取文体文件,read方法还可以用来读取二进制文件。(例:.ext 、dll、bmp等格式文件)
write与writeline方法最大的不同之处在于writeline每次向文件写入数据的时候,都会再多写入chr(13)和chr(10)两个字符,但write则是只是单纯地写入数据。
例:利用readall和write方法将c:\autoexec.bat文件复制成为c:\autoexec.bak文件。
Dim fs as new filesystemobject
dim txtf as textstream, txtf2 as textstream
set txtf=fs.opentextfile(“c:\autoexec.bat”,forreading,true)
set txtf2=fs.createtextfile(“c:\autoexec.bak”,true)
txtf2.write txtf.readall
txtf2.close
txtf.close
首先:定义一个全局变量textchange 记载文本框是否曾修改过。
2 在new_Click()事件中
Private Sub new_Click()
If textchange = 1 Then
aa = MsgBox("是否保存已修改过的文件", vbOKCancel)
If aa = 1 Then
savefile ‘用户定义过程,作用保存文件
End If
End If
Text1.Text = ""
Text1.SetFocus
textchange = 0
End Sub
Savefile过程:
Private Sub savefile()
Dim fs As New FileSystemObject
Dim txtf As TextStream
CommonDialog1.ShowSave
Set txtf = fs.OpenTextFile(CommonDialog1.FileName, ForWriting, True)
txtf.Write Text1.Text
txtf.Close
textchang = 0
End Sub
3 在open_Click()事件中
Private Sub open_Click()
Dim fs As New FileSystemObject
Dim txtf As TextStream
If textchange = 1 Then
aa = MsgBox("是否保存已有的修改?", vbOKCancel)
If aa = 1 Then
savefile
End If
End If
Text1.Text = ""
textchange = 0
CommonDialog1.ShowOpen
Set txtf = fs.OpenTextFile(CommonDialog1.FileName, ForReading, True)
Text1.Text = txtf.ReadAll
txtf.Close
End Sub
Private Sub save_Click()
savefile
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "open"
open_Click
Case "new"
new_Click
Case "save"
save_Click
Case "copy"
mcopy_Click
Case "cut"
mcut_Click
Case "paste"
mpaste_Click
End Select
End Sub