VB中filesystemobject对象实现文件存取方法

最简单的方法是使用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”,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 FileSystemObjectDim txtf As TextStreamIf textchange = 1 Then aa = MsgBox("是否保存已有的修改?",vbOKCancel) If aa = 1 Then savefile End IfEnd IfText1.Text = ""textchange = 0CommonDialog1.ShowOpenSet txtf = fs.OpenTextFile(CommonDialog1.FileName,ForReading,True)Text1.Text = txtf.ReadAlltxtf.CloseEnd SubPrivate Sub save_Click()savefileEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.KeyCase "open" open_ClickCase "new" new_ClickCase "save" save_ClickCase "copy" mcopy_ClickCase "cut" mcut_ClickCase "paste" mpaste_ClickEnd SelectEnd Sub

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...