在开发web应用程序中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在vb6中新提供了一套称为fso(file system object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。
一、fso简介
fso对象模型包含以下几种对象:
drive对象:允许收集系统物理或通过lan与系统逻辑连接的硬盘、cd-rom等驱动器的可用空间、共享名等信息。
folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
textstream对象:允许创建和读写文本文件。
filesystemobject对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过filesystemobject对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。fso模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。
在这篇文章中,我们将讲解利用fso对象模型的textstream对象对文本文件的操作。
(一) 用 filesystemobject 来获取文本文件对象
1.创建一个 filesystemobject 对象实例
要进行文件操作,首先必须创建一个 filesystemobject 对象实例,用来创建或打开一个文件.创建一个 filesystemobject 对象实例的具体格式为(以afilesystemobject)为例:
set afilesystemobject = createobject("scripting.filesystemobjecct")
2.用 filesystemobject 来获取文本文件对象textstream
filesystemobject 提供了两种方法用于获取文本文件对象 textstream,其中用于创建
文件的是 createtextfile,用于打开已存在文件的是 opentextfile,两种方法的返回结果都是
一个 textstream 对象的实例,利用该对象可以进行文件的具体操作.
⑴ 创建一个新文件
创建新文件的方法的具体格式为(以afilesystemobject为例):
afilesystemobject.createtextfile(newfilename,overwriteexistingfile,isunicode)
其中:
newfilename 是一个string值,指定要建立的文件的名称,通常为文件的实际路径
加文件名称,如c:\webshare\aspsamp\filetest.txt
overwriteexistingfile 是一个boolean值,表示如果有同名文件存在时是否覆盖
原来的文件.该参数可以省略,缺省时为false,即不覆盖原来文件.
isunicode 是一个boolean值,表示要建立的文件是ascii文件还是unicode文件,
该参数可以省略,缺省时为false,即为ascii文件.
⑵ 打开已存在的文件
打开已存在文件的方法的具体格式为(以afilesystemobject为例):
afilesystemobject.opentextfile(filename,iomode,create,format)
其中:
filename 是一个string值,指定要打开的文件的名称,通常为文件的实际路径
加文件名称,c:\filepath\test.txt
iomode 是常数值,表示打开文件的目的,forreading(1)表示用于读取数据;
forappending表示用于增加数据.该参数可以省略,缺省时为forreading.
create 是一个boolean值,表示要打开的文件不存在时是否创建新文件,
该参数可以省略,缺省时为false,即不创建新文件.
format 表示文件打开的方式.其可能的值及含义如下:
tristatetrue : 以 unicode 的方式打开.
tristatefalse : 以 ascii 的方式打开.
tristateusedefault : 以系统默认的方式打开.
该参数可以省略,缺省时为 tristatefalse ,即ascii方式.
(二).用 textstream 进行文件操作
在建立或打开了文件之后,就可利用对象 textstream 提供的方法进行文件的实际操作了.
1.用于写操作的方法有:
⑴ write(string)
将由string指定的字符串写入到文件中.
⑵ writeline(string)
在文件中写入由string指定的字符串,并写入一个换行字符.
参数string可以省略,此时将在文件中插入一个空行.
⑶ writeblanklines(numoflines)
在文件中插入若干空行,行数由 numoflines 指定.
2.用于读操作的方法和属性方法有:
⑴ atendofline
该属性是一个boolean值,表示文件指针是否已指向当前行的行尾.
⑵ atendofstream
该属性是一个boolean值,表示文件指针是否已指向文件尾.
⑶ column
该属性是一个整数值,表示文件指针在当前行中的位置.
⑷ line
该属性是一个整数值,表示文件指针所在行的行号.
⑸ read(numofcharacters)
该方法从文件当前位置开始,读入由numofcharacters数目指定的若干字符,返回一个
字符串.
⑹ readline
该方法从文件当前位置开始,读入当前行的内容直到行尾,返回一个字符串.
⑺ readall
该方法从当前位置开始,读入整个文件的内容直到文件结束,返回一个字符串.
⑻ skip(numofcharacters)
该方法从文件当前位置开始,跳过由numofcharacters数目指定的若干字符.
⑼ skipline
该方法从文件当前位置开始,跳过当前行的内容.
3.用于关闭文件的方法有:
⑴ close
关闭已经建立或打开的文件.
(三)、下面就以一个实例来说明如何使用fso来读取文本文件和如何保存到数据库:
1、 先创建一个读取文件路径的页面:file.htm
…
<form method=post action="upfile.asp" >
<div align="center"> <br>
<br>
<br>
<br>
<input type="file" name="path" size="40">
<input type="submit" name="dr" value="导入信息">
</div>
</form>
…
2、 编写把获取到的文本值保存到数据库代码:upfile.asp
<%@language="vbscript"%>
<%response.buffer=true%>
<!–#include file="adovbs.inc"–>
<%
strconn="dsn=datasourcename"
set conn=server.createobject("adodb.connection")
conn.open strconn
set objcomm=server.createobject("adodb.command")
objcomm.commandtext="sp_addmsg" ‘调用存储过程
objcomm.commandtype=adcmdstoredproc
set objcomm.activeconnection=conn
创建输入输出参数
set objparamecom=objcomm.createparameter("wc_ecompanyname",advarchar,adparaminput,100)
objcomm.parameters.append objparamecom
@in_ecompanyname varchar(50), –公司英文名称
set objparamaddr=objcomm.createparameter("wc_address",advarchar,adparaminput,200)
objcomm.parameters.append objparamaddr
@in_address varchar(50), –公司地址
set objparamcity=objcomm.createparameter("wc_city",advarchar,adparaminput,100)
objcomm.parameters.append objparamcity
@in_city varchar(50), –城市
…
创建参数完毕
%>
<%
dim alltext,strline1,strline2,strline3
dim strpath,fileurl
fileurl=""
strpath=trim(request.form("path"))
fileurl=strpath
set fso=createobject("scripting.filesystemobject")
set atextstream=fso.opentextfile(fileurl,1,false,tristatefalse)
提取数据
do while not atextstream.atendofstream
初始化变量
strline1=""
strline2=""
strline3=""
…
atextstream.skipline
atextstream.skip(11)
strline1=trim(atextstream.readline)
atextstream.skip(11)
strline2=trim(atextstream.readline)
atextstream.skip(5)
strline3=trim(atextstream.readline)
…
end if
将变量加入参数集
objparamecom.value=strline1
objparamccom.value=strline2
objparamaddr.value=strline3
…
操作结束
objcomm.execute() 运行命令
loop
response.write "<br>"+"导入库成功!<a href=dolist.html>[继续导入]</a><br>"
set conn=nothing
set fso=nothing
set atextstream=nothing
%>
附:存储过程sp_addmsg代码
create procedure dbo.sp_addmsg –导入国外企业信息
(
@in_companyname varchar(100), –公司名称
@in_address varchar(200), –公司地址
@in_city varchar(100), –公司所在城市
…
)
as
set nocount on
begin tran
insert into tb_wclibrary(
wc_companyname,
wc_ccompanyname,
wc_address,
…
)
values(
@in_companyname,
@in_ccompanyname,
@in_address,
…
)
if @@error <> 0
begin
rollback tran
return -1
end
commit tran
return 0
set nocount off
至此,全文内容讲解结束,希望这篇文章能给读者带来一定的帮助。