农公子网站建设公司专注企业网站建设,关键词排名优化,长尾词霸屏系统!
打开客服菜单
定制建站品牌网页设计
南宁公司网站建设首页 > 技术支持 > FSO是什么?它有何作用用途及使用缺陷?
FSO是什么?它有何作用用途及使用缺陷?
编辑 :

网站建设

时间 : 2020-02-07 10:10 浏览量 : 43

在ASP中,FSO的意思是File System Object,即文件系统对象。我们将要操纵的计算机文件系统,在这里是指位于web服务器之上。所以,确认你对此拥有合适的权限。理想情况下,你可以在自己的机器上建立一个web服务器,这样就能方便地进行测试。如果运行于Windows平台,请试一试微软公司的免费个人Web服务器PWS。FSO对象包括 :驱动器对象(Drive Object)用来存取本地盘或网络盘,文件系统对象(FielSystemObject 简称FSO)是用来存取文件系统,文件夹对象(Folder Object)用于存取文件夹的各种属性 ,文本流对象(TextStream Object 简称TS)存取文件内容 。


在使用以上对象,你的确可以在一台电脑上为所欲为,但同样也可能会造成灾难,所以在使用FSO的时候要注意安全,特别是在Web应用中,Web服务器中会存储诸如用户信息,日志文件等等重要信息,更要格外小心。如何使用FSO? 要开始干“坏事”之前,首先要学会建立FSO。如果你曾经在ASP中创建过对象,那么这事好办: <% Set fso = Server.CreateObject("Scripting.FileSystemObject") %> 。现在我们已经建立了FSO,并赋值给变量fso,接下来就可以使用我们熟悉的object.method方法来使用它了(如果你对对象的操作不熟悉,请自己去补课,这里恕不奉陪)。

seo优化技术

在下面的例子中,主要使用的是fso.method和fso.property。 (FSO模块来自微软提供的脚本运行库scrrun.dll中,许多应用系统都会调用它,例如Access,Word等等,并非专为ASP应用开发。) 下面是我们要用到的部分FSO方法: CopyFile 拷贝一个或多个文件 ,CreateTextFile 创建一个文件并返回一个TS对象 ,DeleteFile 删除一个文件 ,OpenTextFile 打开一个文件并返回一个可用于读和添加的TS对象。 要获得完整的FSO方法,请参看MSDN,下面看个例子吧。好,现在我们的guestbook里已经存储了不少用户的信息了,如果这时一个用户想看看我们访客的信息,我们得把信息再还原出来。由于不是数据库,得自己动手来解决分段问题。看看test.txt,每三行就是一个用户的信息,好办: 


<% 
' 建立fso对象 
set fso = Server.Createobject("Scripting.FileSystemObject") 
path = "c:temptest.txt" 
'打开文件 
set file = fso.opentextfile(path, 1) <-- 用于读 
do until file.AtEndOfStream 
Response.write("Name: " & file.ReadLine & " ") 
Response.write("Home Page: " & file.ReadLine & " ") 
Response.write("Email: " & file.ReadLine & "<p>") 
loop 
' 关闭并清除 
file.close 
set file = nothing 
set fso = nothing 

%> 


(这里我们只是将信息简单输出,你可以根据实际情况作调整,包括输出到表格和DHTML form中。) ReadLine方法用于从文件中读取一行,下次调用ReadLine方法将读取下一行。AtEndOfStream是TS对象的一个属性,让你知道是否到达文件结尾。 假设由于某种原因文件有问题,例如某个用户只有两行,那么我们会得到以下错误信息: Server object error 'ASP 0177 : 800a003e' ,所以加入一些错误处理代码是必要的。现在我们已经对FSO有一些基本认识了,是时候来讨论一下FSO的权限问题。FSO的读取权限就是创建FSO的账号所拥有的权限。如果某人从Internet上使用这个页面,那么创建FSO的就是Internet账号。


如果你用administrator本机登录并访问页面,那么建立的FSO就拥有administrator的权限。 Internet账号(IUSER_机器名)通常只有读权限,这意味着用户永远无法写guestbook文件。所以必须想办法解决。 第一个办法,是让用户首先要用一个有写权限的账号登录。但实际上所有从Internet访问的用户都是以anonymous登录,所以这个方法比较难实现。 第二个方法是建立一个允许账号为 IUSER_机器名 的用户读写的目录。但这样可能会带来安全漏洞。如果这个目录让黑客知道了,就可以往里面写一些代码并通过某种方式运行它,那你就惨了。所以最好将这个目录建立在Web路径之外(也就是inetpub路径之外)。 

seo优化技术2

现在让我们来做更进一步的工作,用FSO在我们的Web站点上实现search功能,建立搜索引擎的关键是递归。 首先来建立搜索页面。假设我们已经给用户提供了一个输入搜索字符串的页面。 
Dim objFolder 
Dim strSearchText 
Dim objFSO 
strSearchText = Request.Form("SearchText") <-- 搜索字符串 
' 建立 FSO 和文件夹对象 
Set fso = Server.CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(Server.MapPath("/")) 

Search objFolder 


上面的代码只是进行了一些变量初始化工作,真正的serach工作由下面这个Search函数执行。 


Function Search(objFolder) 
Dim objSubFolder 
'循环搜寻当前文件夹中的每个文件 
For Each objFile in objFolder.Files 
Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) <-- For Reading 
'把文件内容读入一个变量 

strFileContents = objTextStream.ReadAll 

seo优化技术3

'如果在文件中找到该字符串,写个指到该文件的链接 
If InStr(1, strFileContents, strSearchText, 1) then 
Response.Write "<A href="/oblog3/"/" & objFile.Name &""">" & objFile.Name & "</A><BR>" 
bolFileFound = True 
End If 
objTextStream.Close 

Next 


'以下是递归部分 
' 如果其中有子目录,再调用Search函数 
For Each objSubFolder in objFolder.SubFolders 
Search objSubFolder 
Next 

End Function 

南宁公司网站建设

该程序会自动搜索Web root目录以下的所有子目录,还不错吧? (FSO要使用物理绝对路径,而不是Web Path的相对路径。例如,要打开的是c:inetpubwwwroottempindex.html,而不能是www.enfused.com/temp/index.html 或 /temp/index.html。要将后一种路径转换为物理绝对路径,使用Server.MapPath("filename")。) FSO还是存在一些弱点。例如,它在处理二进制文件的时候就不那么方便。对于象MS Word文档,图像等许多文件,你只能执行移动,删除等操作,而不能打开,读/写。当然,FSO提供了另外一套操作它们的方法(具体请参考MSDN),但始终不如我们惯用的open方法那么顺手。 


另一个不足与文件大小有关。由于FSO操作需要经常地将文件内容读入内存,文件有多大,就需要多少内存,所以如果你要处理大文件或一大堆小文件的话,内存的开销会很可观,可能会对系统运行速度有影响。解决办法是将大文件分段处理,并记住经常地清除内存(把变量设为null或"",set 对象=nothing)。 此外,FSO不能改变文件和文件夹的属性。例如,在建立guestbook的例子中,其实有一个安全机制我们没有实现,就是将保存信息的文件的属性设为只读,只有在更新的时候才临时改为可写,写完后再改回只读,许多用CGI或Perl写的guestbook程序都有这种功能,可惜用FSO无法实现该功能。 

南宁公司网站建设3

  • 超低建站费用

  • 具备营销能力

  • 强大SEO功能

  • 贴心售后技术支持

cache
Processed in 0.009394 Second.