FSO CreateTextFile 写出的文件编码问题
Set htmlwrite=fso.CreateTextFile(Server.MapPath("path/1.txt"),true,true)
第true可以覆盖,改成false表示覆盖。
第二个true表示unicode,省true就是ansi。
fso.createtextfile
篇一:VB6中的FSO对象模型
VB6中的FSO对象模型
--------------------------------------------------------------------------------
在编程中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。
一、FSO简介
FSO对象模型包含以下几种对象:
Drive对象:允许收集系统物理或通过LAN与系统逻辑连接的硬盘、CD-ROM等驱动器的可用空间、共享名等信息。
Folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
Files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
TextStream对象:允许创建和读写文本文件。
FileSystemObject对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过FileSystemObject对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。FSO模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。
FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,可从“工程”选单的“引用”对话框中选择“Microsoft Scripting Runtime”项来引用此文件。
创建一个FileSystemObject对象,可以通过如下两种方法来完成:1苯一个变量声明为FileSystemObject对象类型:Dim fso As New FileSystemObject;2笔褂CreateObject方法来创建:Set fso=CreateObject(″Scripting.FileSystemObject″)。
二、对驱动器的操作
对驱动器的操作主要通过Drive对象并配合FileSystemObject对象,FSO不支持进行创
建或删除驱动器的操作,而只允许收集关于系统所用驱动器的信息。通过该对象的属性可以获得下列信息:以字节表示的驱动器可用空间(AvailableSpace或FreeSpace);为驱动器指定的字母号(DriveLetter);驱动器类型(DriveType);驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem);驱动器是否可用(IsReady);驱动器的路径或根文件夹(Path和RootFolder);驱动器序列号(SerialNumber);共享名或卷标名(ShareName和VolumeName);以字节表示的驱动器总空间(TotalSize)。下面一例说明了如何收集有关驱动器的信息:
Private Sub Command1―Click()
Dim fso As New FileSystemObject, drv As Drive, str As String
Set drv=fso.GetDrive(fso.GetDriveName(″c:″))
Debug.Print ″Total Space: ″ & FormatNumber(drv.TotalSize / 1024, 0) & ″Kb″
Debug.Print ″Free Space: ″ & FormatNumber(drv.FreeSpace / 1024, 0) & ″Kb″
End Sub
三、对文件夹的操作
Folder对象允许通过所提供的方法来复制(Copy)、删除(Delete)或移动(Move)文件夹,并通过其属性向系统查询其名称(Name)、路径(Path)以及创建日期(DateCreated)等。FileSystemObject 对象对文件夹的操作方法有创建(CreateFolder)、复制(CopyFolder)、移动(MoveFolder)和删除(DeleteFolder)。在进行上述操作之前,首先要获得该文件夹的访问句柄(GetFolder)。下例说明了如何对文件夹进行操作:
Private Sub Command2―Click()
Dim fso As New FileSystemObject, fldr As Folder
Set fldr=fso.GetFolder(″c:″)
′获得当前文件夹的访问句柄
Debug.Print ″Parent folder name is: ″ & fldr
′打印文件夹名
Debug.Print ″Contained on drive ″ & fldr.Drive′打印驱动器名
fso.CreateFolder (″c:\Temp″)
′用FileSystemObject对象创建一个新的文件夹
fso.DeleteFolder (″c:\Temp″)
′删除新建的文件夹
End Sub
访问一个对象,要首先用“Get”方法获得该对象的访问句柄,但如果是用“Create”函数新创建一个对象, 函数会返回一个句柄到新创建的对象,这时只要设置一个变量来获取该句柄即可,不必再用“Get”方法。如:Set fldr=fso.CreateFolder(″C:\Temp2″)。
四、对文件的操作
读写文件,在VB6之前都是使用Open等语句来实现,FSO支持通过TextStream对象来创建和读写文本文件。
FSO通过CreateTextFile、OpenTextFile、OpenAsTextStream 三种方法来创建一个顺序文本文件。文件创建后,就可分三步写入数据:
1.崩用FileSystemObject对象的OpenTextFile方法或File对象的OpenAsTextStream 方法打开文本文件以备写入数据。
2.笔褂TextStream 对象的Write、WriteLine或WriteBlankLines方法写入数据。
3.笔褂TextStream对象的Close方法关闭文件。
下例说明了如何创建文本文件:
我们可使用TextStream 对象的Read、ReadLine或ReadAll方法从一个文本文件中读取数据。
Private Sub Command3―Click()
Dim fso As New FileSystemObject, fil As File, ts As TextStream
fso.CreateTextFile ″c:\testfile.txt″
Set fil=fso.GetFile(″c:\testfile.txt″)
Set ts=fil.OpenAsTextStream(ForWriting)
ts.Write (″这是一个测试文件!″)
ts.Close
Set ts=fil.OpenAsTextStream(ForReading)
s=ts.ReadLine
MsgBox s
ts.Close
End Sub
除了创建与读写文件之外,VB6还可通过FileSystemObject对象对文件进行复制(CopyFile)、移动(MoveFile)与删除(DeleteFile)等操作,在File对象中等效的方法有Copy 、Move和Delete。例程如下 :
Private Sub Command4―Click()
Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File
Set txtfile=fso.CreateTextFile(″c:\testfile.txt″, True)
txtfile.Write (″这是一个测试文件!″)
txtfile.Close
Set fil1=fso.GetFile(″c:\testfile.txt″)
′获得一个文件句柄
fil1.Copy (″c:\temp1\testfile.txt″)
′将该文件复制到\temp1目录下
fil1.Move (″c:\temp2\testfile.txt″)
′将该文件移动到\temp2目录下
Set fil1=fso.GetFile(″c:\temp1\testfile.txt″)
′获得这些文件当前位置的句柄
Set fil2=fso.GetFile(″c:\temp2\testfile.txt″)
fil1.Delete
fil2.Delete
End Sub
篇二:FSO组件
FSO组件
一、FSO组件:擅长处理某个功能的对象。
二、ASP内置组件:
创建AD Rotator对象实例:
<% Set MyAds = Server.CreateObject("MSWC.AdRotator") %>
三、使用组件:DataBase
Access (ADO)(FSO) 操作数据库功能 操作文件功能 File Access
四、FSO的创建:
Set 对象变量名=Server.CreateObject(“Scripting.FileSystemObject”)
Eg:Set Fs= Server.CreateObject(“Scripting.FileSystemObject”)
五、复制、删除文件
1、复制文件
语法:文件系统对象实例名称.CopyFile(Source,Destination,Overwrite) 用途:FileSystemObject对象的CopyFile方法将 Source指定的文件复制到Destination,若有同名文件,且Overwrite的值为True表示将其覆盖,否则不覆盖。
2、删除文件
语法:文件系统对象实例名称.DeleteFile Path,force
用途:FileSystemObject对象的DeleteFile方法可以删除Path指定的文件。
其中path必须使用实际路径;force默认值为False,不删除只读
文件,若要采用默认值可省略不写。若要删除只读文件,force的值要设为True。
【实例如下】:file.asp文件用来检测if.asp文件是否存在,如存在则删除,否则创建该文件。
<% set objfile=server.createobject("scripting.filesystemobject")
p=server.mappath("abc\if.asp")
if objfile.fileexists(p) then
objfile.deletefile p,true
response.write"此文件已存在,已被删除!"
else
set cgfile=objfile.createtextfile(p,false)
response.write"此文件不存在,已完成建立"
end if %>
六、文件的打开、读取与写入
1.打开文件
语法:文件系统对象实例名称.OpenTextFile(Filename,I/Omode,Creat)
使用FileSystemObject对象的OpenTextFile方法可以打开
Filename指定的文本文件,并传回一个TextStream对象实例;I/Omode为文本文件的打开方式,"1"表示只读,"2"表示可写(清除文本文件的原始内容),"8"表示追加到文本文件的后面(不清除文本文件的原始内容),默认为"1";Creat为布尔值,若为True表示当文本文件不
存在时就自动创建一个空的文件,若为False就会在文件未找到时产生一个出错信息。默认值为False,建议改为True以避免在打开文件时检查是否出错。
在打开或创建了文本文件后,就得到一个TextStream对象,该对象有一个光标,就好象是在字处理程序中的光标一样。TextStream对象有方法和属性。
2.读取文件内字符
打开文件并取得一个TextStream对象实例后,可使用TextStream
对象提供的Read(Num)、ReadLine、ReadAll方法从文件读取Num个字符、一行或全部内容。
【读取几个字符的实例如下】
<% set cf=server.createobject("scripting.filesystemobject")
p=server.mappath("abc/if.txt")
response.write p
set sf=cf.opentextfile(p,1,false)
sf.skip(4) '在文本流对象中将光标的位置移动一定数目的字符串长度
t=sf.read(8)
response.write t
sf.close '关闭文本流对象以及对应的文本文件 %>
【read one 读取一行实例如下】
<% set cf=server.createobject("scripting.filesystemobject")
p=server.mappath("abc/if.txt")
response.write p
set sf=cf.opentextfile(p,1,true)
sf.skipline() '在文本对象流中将光标跳过一行
t=sf.readline
response.write t
sf.close %>
【read All 读取所有实例如下】
<% set cf=server.createobject("scripting.filesystemobject")
p=server.mappath("abc\if.txt")
response.write p&"<br>"
set sf=cf.opentextfile(p,1,false)
t=sf.readall
response.write replace(t,chr(10),"<br>")
sf.close %>
3.向文件写入字符
打开文件并取得一个TextStream对象实例后,可使用TextStream
对象提供的Write(String)、WriteLine(String)、WriteBlankLines(Num)
方法,在文件内写入字符串、字符串和换行符、Num个换行字符。
【写入实例如下:】
<% set objf=server.createobject("scripting.filesystemobject")
p=server.mappath("if.txt")
set wf=objf.opentextfile(p,2,true)'以可写入方式打开ff.txt文件,如果该文件不存在,就创建它。
wf.write"中华人民共和国" '写入文本,必须用双引号""引起来。
wf.write(55+7)'write方法还具有计算功能,写入的为表达式的值。
wf.write"周年"
wf.writeline("--2011年10月1日")
wf.writeblanklines(3) '将3行空行写入流对象中。
wf.writeline"团结、勤奋、求实、创新"
wf.close %>
第二部分
Content Linking组件:专门用于管理网页或网址间的超文本链接。通过一个网页或网址的线性排列顺序列表来管理多个网页或网址间的超文本链接。
一、建立Content Linking组件的实例:
Set 对象实例名称=Server.CreateObject("MSWC.Nextlink")
二、创建网页或网址的线性排列顺序文件
该文件是个文本文件,文件扩展名为.txt,其语法为: 网页的URL[描述文字[附注文字]]
其中“网页的URL”是表示所要连接的网页或网址;“描述文字”是对特定网页的说明文字,是显示给浏览者的;“附注文字”是对网址的附注说明,不显示给浏览者,但给编程者做详细的说明。
三、Content Linking组件的方法
1、首先用 set nextlink=server.createobject("mswc.nextlink")创建一个名为nextlink的对象实例。
2、nextlink.GetListCount("url.txt")方法取得“网页或网址的线性排列文件”中的“网页或网址URL”个数。返回值为整数。
3、nextlink.GetListIndex("url.txt")方法取得当前文档在“网页或网址的线性排列文件”中的排列顺序。返回值为整数。
4、nextlink.GetNextDescription("url.txt")方法取得“网页或网址的线性排列文件”中的下一个“网页或网址URL”的描述说明,返回值为字符串。
5、nextlink.GetPreviousDescription("url.txt")方法取得“网页或网址的线性排列文件”中的前一个“网页或网址URL”的描述说明,返回值为字符串。
6、nextlink.GetNthURL("url.txt",n)方法取得“网页或网址的线性排列文件”中的指定顺序值的“网页或网址URL”,返回值字符串。
7、nextlink.GetNthDescription("url.txt",n)方法取得“网页或网址的线性排列文件”
篇三:fso组件
编辑词条
fso
FSO=Futong Showa Optical
杭州富通通信技术股份有限公司的缩写.
英文全称如下:
hangzhou Futong Showa Optical communication co., ltd.
在ASP中,FSO的意思是File System Object,即文件系统对象。我们将要操纵的计算机文件系统,在这里是指位于web服务器之上。所以,确认你对此拥有合适的权限。理想情况下,你可以在自己的机器上建立一个web服务器,这样就能方便地进行测试。如果运行于Windows平台,请试一试微软公司的免费个人Web服务器PWS。
FSO 模型对象
Drive Object:驱动器对象 供存取磁盘或者网络驱动器
FileSystemObject Object:文件系统对象 供存取计算机的文件系统
Folder Object:文件夹对象 供存取文件夹的所有属性
TextStream Object:文本流对象 供存取文件内容
你可以使用上面的对象做计算机上的任何事情,也包括破坏活动 ;-( 所以,请小心使用FSO。在web环境中,存储信息是非常重要的,比如用户信息,日志文件,等等。FSO提供了一个强大且简单的方法高效率地保存数据。在这篇文章里面,着重讨论FileSystemObject和TextStream对象。
FSO由微软公司提供支持,对于非Windows系统,大概不能再使用ASP。怎么样使用FSO?
为了使用FSO来执行所有的工作,首先要创建对象,代码就象下面这样:< %
Set fso = Server.CreateObject("Scripting.FileSystemObject")
% >
这样就建立了FSO并且赋予变量fso,接着就可以使用熟悉的object.method语法来执行文件系统的操作〔查看Visual Basic文档,获取更多的关于对象和对象向导编程的知识〕。在这里,我们可以使用fso.method 或者 fso.property,这些将在下面的例子中看到。
FSO模型位于由微软提供的脚本运行时间DLL文件中,它是scrrun.dll。你可以在任何应用程序中引用这个DLL文件,比如MS Access,Word。 就是说,并非仅仅限制在ASP中应用它。
这里有一个简要的FSO方法列表:
FSO方法
CopyFile 拷贝一个或者多个文件到新路径
CreateTextFile 创建文件并且返回一个TextStream对象
DeleteFile 删除一个文件
OpenTextFile 打开文件并且返回TextStream对象,以便读取或者追加。如果想了解完整的FSO方法与属性,请查阅微软MSDN。下面来看几个例子。
权限许可
上面讨论了基本知识,然后说说权限许可的问题。FSO以创建它的用户帐户权限运行,换言之,如果有人从Internet上访问你的页面,那么这个internet帐户就创建FSO。如果以administrator的身份登录计算机,并且登录页面,那么administrator帐户就创建了FSO。这是非常重要的,因为一定的帐户拥有一定的权限,并且FSO需要一些权限从而能完整的执行功能。internet帐户(IUSER_MachineName,MachineName是服务器的名字)一般只拥有读权限,这意味着用户将不能写入留言簿文件。然而,有几个选择可以绕过这个问题。
首先,也是很困难的,是要求用户在填写留言簿前登录到服务器。然而,留言簿的要点是从匿名用户处收集信息,如
果要求用户登录,就必须要知道他们是谁。因此,跳过这个选择,看下一个。第2个方法是创建一个目录或者文件,IUSER_MachineName用户对此有写权限。这样做可能开放了一些潜在的安全漏
洞,因为任何知道正确目录并具备一定web技巧的人就能在服务器上填充内容。这是一个很严重的禁忌。所以你必须确认在
隐藏的场所保存了这些可写目录的信息,并且尽可能地将这些目录设置在web目录结构以外(比如在Windows下,这是一个
不在inetpub目录下的一个目录)。
文件读取
现在已经有了一些用户信息保存在文件中,就像一个简单的数据库。假设有一个用户想了解所有的访问者,就要从登记的信息中分离出相关部分,因为没有象数据库一样拥有结构化的列。我们知道,在所创建的文件中,第1行是用户名,第2行是他们的主页,第3行是他们的电子邮件地址。随后登记的用户也是按照这样的结构存储他们的信息,所以每3行将包含一个用户的登记信息。知道了这些,就可以编写下面的代码来显
示信息:
< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"
' open the file
set file = fso.opentextfile(path, 1) < -- For
reading
接着,分析每一行,并且格式化数据:
do until file.AtEndOfStream
Response.write("Name: " & file.ReadLine & " ")
Response.write("Home Page: " & file.ReadLine & " ")
Response.write("Email: " & file.ReadLine & "< p>")
loop
' close and clean up
file.close
set file = nothing
set fso = nothing
%>
这里仅仅做了一个非常简单的输出,但是你可以根据情况包含表格或者DHTML表单信息。
如果已经正确地建立并写入了文件,上面的小小循环将合适地列出数据库中的每一个人的信息。ReadLine方法读取1
行内容,直到遇到换行符,随后的ReadLine调用将读取下一行。AtEndOfStream是TextStream对象的属性,它告诉我们何时
遇到文件的尾部。
假设由于某种原因,我们没有正确地形成文件,如果一个用户只有2行信息而不是3行,那么就会产生一些错误。我们
这里的循环取回文件中的下3行信息,如果没有3行多的信息,就将出现如下的错误信息:
Server object error 'ASP 0177 : 800a003e'
所以,一定要添加一些错误处理代码,以防文件中插入了多余的行或者少了必要的行信息。
写文件
假设你想创建一个简单的留言簿,你可以建立一个数据库,在其中存储用户的信息。然而,如果并不需要数据库的强大功能,使用FSO来存储信息将节省你的时间和金钱。并且,一些ISP也许限制了web上的数据库应用。假设你在一个表单中收集了一些用户信息,这里是一个简单表单HTML代码:
< html>
< body>
< form action="formhandler.asp" method="post">
< input type="text" size="10" name="username">
< input type="text" size="10" name="homepage">
< input type="text" size="10" name="Email">
< /form>
< /body>
< /html>
再看看formhandler.asp中处理表单的代码:
< %
' Get form info
strName = Request.Form("username")
strHomePage = Request.Form("homepage")
strEmail = Request.Form("Email")
' create the fso object
Set fso = Server.CreateObject("Scripting.FileSystemObject")
迄今为止,还没有新鲜的东西,无非是获取表单域的值并且赋值到变量。下面出现了有趣的部分 - 写文件:
path = "c: emp est.txt"
ForReading = 1, ForWriting = 2, ForAppending = 3
' open the file
set file = fso.opentextfile(path, ForAppending, TRUE)
' write the info to the file
file.write(strName) & vbcrlf
file.write(strHomePage) & vbcrlf
file.write(strEmail) & vbcrlf
' close and clean up
file.close
set file = nothing
set fso = nothing
回想一下,OpenTextFile方法返回一个TextStream对象,它是FSO模型中的另外一个对象。TextStream对象揭示了操作文件内容的方法,比如写、读一行、跳过一行。VB常量vbcrlf产生一个换行符。
在OpentextFile的命令参数中定义了TRUE,这就告诉了系统,如果文件不存在,就创建它。如果文件不存在,并且没有定义TRUE参数,就会出错。
现在转到目录c: emp,打开test.txt,你可以看到如下的信息:
User's name
User's home page
User's email
当然,这些单词可以被输入在表单中的任何内容所替换。
使用FSO进行搜索
你也许想:好,现在我知道如何写入文件了。但能做到更多一些吗?下面来试一试为web站点建立一个搜索功能。建立搜索引擎的关键是递归。主要地,编写一段代码搜索目录下的文件,然后对所有的目录循环执行同样的代码。因为不能确定总共有多少个子目录,所以必须一遍又一遍地执行搜索代码,直到结束。递归调用非常好!下面来创建搜索页面。假设已经建立了一个HTML表单,用户在其中输入一个搜索字符串。
Dim objFolder
Dim strSearchText
Dim objFSO
strSearchText = Request.Form("SearchText") < -- The search string' create the FSO and Folder objects
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath("/"))
Search objFolder
上面的代码简单地初始化变量,Search函数执行搜索功能,描述如下:Function Search(objFolder)
Dim objSubFolder
'loop through every file in the current
folder
For Each objFile in objFolder.Files
Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) < -- For Reading'read the file's contents into a
variable
strFileContents = objTextStream.ReadAll
'if the search string is in the file, then
write a link
' to the file
If InStr(1, strFileContents, strSearchText, 1) then
Response.Write "< A HREF=""/" & objFile.Name & _
""">" & objFile.Name & "< /A>< BR>"
bolFileFound = True
End If
objTextStream.Close
Next
'Here's the recursion part - for each
' subfolder in this directory, run the Search function again
For Each objSubFolder in objFolder.SubFolders
Search objSubFolder
Next
End Function
为了能打开文件,FSO需要实际的文件路径,而不是web路径。比如,是c:inetpubwwwroot empindex.html, 而不是
/temp/index.html 或者 /temp/index.html。 为了将后者转换为前者,使用Server.MapPath