fso


上传时间:2015-05-28 来源:衣服上的fso是什么意思


第一篇:fso

编辑词条 fso 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 0 回 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, 而不是 www.enfused.com/temp/index.html 或者 /temp/index.html。

为了将后者转换 为前者,使用 Server.MapPath ("filename"), filename 表示 web 路径名。

上面的代码将在你指定的初始目录下的文件夹的每一个子目录中执行,在这里, 初始目录是指 web 根目录“/”。然后 就简单地打开目录下的每一个文件,看看其中是否包含指定的字符串,如果找到 字符串就显示那个文件的链接。

注意,随着文件和子目录数量的增加,搜索花费的时间也将增加。如果需要繁重 的搜索工作,建议你采取其他的方 法,比如微软公司的索引服务器 Index Server。

用 FSO 进行内容管理 ---(文/甘冀平) 到此,你对 FSO 可能已经有了很好的体会。让我们再深入研究一步,来解决更 复杂的难题。首先,你可能希望对文件改名。为了跟踪所有的文档,你将要重新命名 它们以便唯一,这样就可以被系统容易地区别。很不幸,FSO 不允许简单的文件改 名操作,所以我们不得不修改一下。

<% ' create the fso object set fso = Server.Createobject("Scripting.FileSystemObject") path = "c

emp est.txt" strDate = Replace(Date(), "/", "") strDir = "c:inetpubwwwrootarticles" & strDate strNewFileName = Hour(Now) & "_" & Minute(Now) & "_" & second(Now) & ".html" ' open the old file set file = fso.opentextfile(path, 1) < -- For reading strText = file.readall set file = nothing ' check for and/or create folder if not fso.folderexists(Server.MapPath(strDir)) then set f = fso.CreateFolder(Server.MapPath(strDir)) else set f = fso.GetFolder(Server.MapPath(strDir)) end if ' create and write new file set file = fso.Createtextfile(f.path & "" & strNewFileName) file.write(strText) set f = nothing file.close set file = nothing ' delete the old file fso.DeleteFile(path & "" & rst("FileName") & i) ' clean up set fso = nothing %> FSO 能力的不足在这里却成了优势,我们可以一次执行 2 步。首先,打开文件 并读入文件的内容。假设这里要创建一个 唯一的文件夹和一个唯一的文件来存储文章。然而,因为文件夹的路径每天都将 改变,所以必须首先检查是否文件夹已经 存在,如果不存在,就创建它。这在 if not fso.folderexists 代码段完成。然后, 取得那个路径,创建一个新的文件。新 文件建立完成后,删除掉旧文件,这通过 fso.DeleteFile 来完成。

这 2 步就是:对文件改名,然后移动到一个更合适的目录下。注意,在这里还可 以对文件进行更多地操作,比如在写 入新文件前进行一下内容的编辑。

FSO 不能做到的 FSO 确实存在一些弱点 - 比如,它很难处理二进制文件,这包括 Word 文档、 许多图形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作这些文件 - 移动它们、删除它们,等等。你不能做的就是对它们进行打开或者写操作。

另外一个限制是对于文件长度的问题。当立刻读写一些内容时,所有的信息都存 储在内存中 - 内容越多, 消耗的内存就越大。

这将使每个工作都变得慢起来。

所以, 如果需要操作非常大的文件,或者大量的小文件时,考虑将文件分割成小块,并且经 常的清除内存。将应用程序融入进 COM 对象组件,也能大大地提高程序的速度。

同样,你也不能使用 FSO 来管理权限以及文件、文件夹的属性,执行安全加密 的一个很好方法就是将前面提到的留言簿文件设置为只读,在需要时再设置为可写, 然后再修改回来。这个方法经常在 CGI 和 Perl 使用,但是很不幸,还没有令人满意 的方法来用 FSO 实现。

还能用 FSO 做什么? 在 FSO 中还有许多很棒的功能,但许多人没有意识到。这些功能常常是在你感 到做某些事情很难后才发现的, 这时你经常要感叹到

要是我早知道这个方法就好了! 下面列举一下这些不常用但是却非常酷的功能

很少被了解的 FSO 功能 GetSpecialFolder Method 返回特定的 Wi作文ndows 文件夹的路径

Windows 安装 目录;Windows 系统目录;Windows 临时目录 FSO.GetSpecialFolder([0, 1, or 2]) GetTempName Method 返回一个随机产生的文件或者目录名字,用于需要存储 临时数据时 GetAbsolutePathName Method 返回文件夹的绝对路径(类似于 Server.MapPath)。

比如,FSO.GetAbsolutePathName("region") 将返回类似于下面的结果

"c:mydocsmyfolder egion" GetExtensionName Method 返回路径中最后部分的扩展名 (比如:FSO.GetExtensionName("c:docs est.txt") 将返回 txt) GetBaseName and GetParentFolder Methods 返回路径中最后部分的父文件夹 (比如:FSO.GetParentFolder ("c:docsmydocs") 将返回'docs') Drives Property 返回所有本地可用驱动器的集合,用于建立资源浏览器样的用 户接口。

使用上面的功能时,最好建立好出错处理的代码。因为如果需要的参数不存在, 将会产生麻烦的信息。

FSO(Free Space Optics)自由空间光通信,包括大气激光通信和太空激光通信。

是一种无线激光通信方式。

FSO=Floating Storage and Offloading 指浮式储卸油船,一种海上平台,与 FPSO 类似.

第一篇:fso

FSO - FileSystemObject 或 Scripting.FileSystemObject 的缩写,为 IIS 内置组件,用于操作磁盘、文件夹或文本文件。FSO 的对象、方法和属性非常的多,这里用示例的方式列出常用的,如果您要查看更详尽的信息,请点击这里下载 FileSystemObject 参考,注意:《VBScript 语言参考》或《JScript 语言参考》中的:《FileSystemObject 用户指南》和《Scripting 运行时库参考》便是微软给出的 FileSystemObject 完整参考。 FSO 不能操作二进制文件,要操作二进制文件,请使用:ADODB.Stream。 创建文件 dim fso, f set fso = server.CreateObject("Scripting.FileSystemObject") set f = fso.CreateTextFile("C:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖 f.Write("写入内容") f.WriteLine("写入内容并换行") f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车) f.Close() set f = nothing set fso = nothing 打开并读文件 dim fso, f set fso = server.CreateObject("Scripting.FileSystemObject") set f = fso.OpenTextFile("C:\test.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建 f.Skip(3) '将当前位置向后移三个字符 f.SkipLine() '将当前位置移动到下一行的第一个字符,注意:无参数 response.Write f.Read(3) '从当前位置向后读取三个字符,并将当前位置向后移三个字符 response.Write f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数 response.Write f.ReadAll() '从当前位置向后读取,直到文件结束,并将当前位置移动到文件的最后 if f.atEndOfLine then response.Write("一行的结尾!") end if if f.atEndOfStream then response.Write("文件的结尾!") end if f.Close() set f = nothing set fso = nothing 打开并写文件 dim fso, f set fso = server.CreateObject("Scripting.FileSystemObject") set f = fso.OpenTextFile("C:\test.txt", 2, false) '第二个参数 2 表示重写,如果是 8 表示追加 f.Write("写入内容") f.WriteLine("写入内容并换行") f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车) f.Close() set f = nothing set fso = nothing 判断文件是否存在 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") if fso.FileExists("C:\test.txt") then response.Write("目标文件存在") else response.Write("目标文件不存在") end if set fso = nothing 移动文件 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") call fso.MoveFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同 set fso = nothing 复制文件 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") call fso.CopyFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同 set fso = nothing 删除文件 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") fso.DeleteFile("C:\test.txt") set fso = nothing 创建文件夹 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") fso.CreateFolder("C:\test") '目标文件夹的父文件夹必须存在 set fso = nothing 判断文件夹是否存在 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") if fso.FolderExists("C:\Windows") then response.Write("目标文件夹存在") else response.Write("目标文件夹不存在") end if set fso = nothing 删除文件夹 dim fso set fso = server.CreateObject("Scripting.FileSystemObject") fso.DeleteFolder("C:\test") '文件夹不必为空 set fso = nothing

第一篇:fso