ASP中FSO的使用方法

让我们先来看看有什么属性与函数可用,后面会对部分函数做些小例子
ASP中FSO控件的方法或者属性 描述
BuildPath()
生成一个文件路径
CopyFile() 复制文件
CopyFolder() 复制目录
CreateFolder() 创建新目录
CreateTextFile() 生成一个文件
DeleteFile() 删除一个文件
DeleteFolder() 删除一个目录
DriveExists() 检验盘符是否存在
Drives 返回盘符的集合
FileExists() 检验文件是否存在
FolderExists 检验一个目录是否存在
GetAbsolutePathName() 取得一个文件的绝对路径
GetBaseName() 取得文件名
GetDrive() 取得盘符名
GetDriveName() 取得盘符名
GetExtensionName() 取得文件的后缀
GetFile() 生成文件对象
GetFileName() 取得文件名
GetFolder() 取得目录对象
GetParentFolderName 取得文件或目录的父目录名
GetSpecialFolder() 取得特殊的目录名
GetTempName() 生成一个临时文件对象
MoveFile() 移动文件
MoveFolder() 移动目录
OpenTextFile()
打开一个文件流

实例说明

BuildPath(路径,文件名) //这个方法会对给定的路径加上文件,并自动加上分界符
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.BuildPath("c://tmp", "51js.txt"); //生成 c:/tmp/51js.txt的路径
alert(newpath);
-->
</SCRIPT>

CopyFile(源文件, 目标文件, 覆盖) //复制源文件到目标文件,当覆盖值为true时,如果目标文件存在会把文件覆盖
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bak");
-->
</SCRIPT>

CopyFolder(对象目录,目标目录 ,覆盖) //复制对象目录到目标目录,当覆盖为true时,如果目标目录存在会把文件覆盖
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //把C盘的Desktop目录复制到D盘的根目录
-->
</SCRIPT>

CreateFolder(目录名) //创建一个新的目录
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newFolderName = fso.CreateFolder("c://51JS"); //在C盘上创建一个51JS的目录
-->
</SCRIPT>

CreateTextFile(文件名, 覆盖) //创建一个新的文件,如果此文件已经存在,你需要把覆盖值定为true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newFileObject = fso.CreateTextFile("c://autoexec51JS.bat", true); //脚本将在C盘创建一个叫 autoexec51JS.bat的文件
-->
</SCRIPT>

DeleteFile(文件名, 只读?) //删除一个文件,如果文件的属性是只读的话,你需要把只读值设为true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); //为了安全我先把要删除的autoexec.bat备份到你的D盘
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bat"); //把C盘的autoexec.bat文件删除掉
fso.DeleteFile("c://autoexec.bat", true);
-->
</SCRIPT>

DeleteFolder(文件名, 只读?)//删除一个目录,如果目录的属性是只读的话,你需要把只读值设为true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //为了安全我先把你C盘的Desktop目录复制到你D盘的根目录
fso.DeleteFolder("c://WINDOWS//Desktop", true); //把你的Desktop目录删除,但因为desktop是系统的东西,所以不能全部删除,但.........
-->
</SCRIPT>

DriveExists(盘符) //检查一个盘是否存在,如果存在就返会真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
hasDriveD = fso.DriveExists("d"); //检查系统是否有D盘存在
hasDriveZ = fso.DriveExists("z"); //检查系统是否有Z盘存在
if (hasDriveD) alert("你的系统内有一个D盘");
if (!hasDriveZ) alert("你的系统内没有Z盘");
-->
</SCRIPT>

FileExists(文件名) //检查一个文件是否存在,如果存在就返会真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fileName = fso.FileExists("c://autoexec.bat");
if (fileName) alert("你在C盘中有autoexec.bat文件,按下确定后这个文件将被删除!"); //开个玩笑:)
-->
</SCRIPT>

FolderExists(目录名) //检查一个目录是否存在,如果存在就返会真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
folderName = fso.FolderExists("c://WINDOWS//Fonts");
if (folderName) alert("按下确定后系统的字库将被删除!"); //开个玩笑:)
-->
</SCRIPT>

GetAbsolutePathName(文件对象) //返回文件对象在系统的绝对路径
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
pathName = fso.GetAbsolutePathName("c://autoexec.bat");
alert(pathName);
-->
</SCRIPT>

GetBaseName(文件对象) //返回文件对象的文件名
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
baseName = fso.GetBaseName("c://autoexec.bat"); //取得autoexec.bat的文件名autoexec
alert(baseName);
-->
</SCRIPT>

GetExtensionName(文件对象) //文件的后缀
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
exName = fso.GetExtensionName("c://autoexec.bat"); //取得autoexec.bat后缀bat
alert(exName);
-->
</SCRIPT>

GetParentFolderName(文件对象) //取得父级的目录名
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
parentName = fso.GetParentFolderName("c://autoexec.bat"); //取得autoexec.bat的父级目录C盘
alert(parentName);
-->
</SCRIPT>

GetSpecialFolder(目录代码) //取得系统中一些特别的目录的路径,目录代码有3个分别是 0:安装Window的目录 1:系统文件目录 2:临时文件目录
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
tmpFolder = fso.GetSpecialFolder(2); //取得系统临时文件目录的路径 如我的是 C:/windows/temp
alert(tmpFolder);
-->
</SCRIPT>

GetTempName() //生成一个随机的临时文件对象,会以rad带头后面跟着些随机数,就好象一些软件在安装时会生成*.tmp
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
tmpName = fso.GetTempName(); //我在测试时就生成了radDB70E.tmp
alert(tmpName);
-->
</SCRIPT>

MoveFile(源文件, 目标文件) //把源文件移到目标文件的位置
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.MoveFile("c://autoexec.bat", "d://autoexec.bat"); //把C盘的autoexec.bat文件移移动到D盘
-->
</SCRIPT>

你可能希望对文件改名。为了跟踪所有的文档,你将要重新命名它们以便唯一,这样就可以被系统容易地区
别。很不幸,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确实存在一些弱点 - 比如,它很难处理二进制文件,这包括Word文档、许多图形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作这些文件 - 移动它们、删除它们,等等。你不能做的就是对它们进行打开或者写操作。
   另外一个限制是对于文件长度的问题。当立刻读写一些内容时,所有的信息都存储在内存中 - 内容越多,消耗的内存就越大。这将使每个工作都变得慢起来。所以,如果需要操作非常大的文件,或者大量的小文件时,考虑将文件分割成小块,并且经常的清除内存。将应用程序融入进COM对象组件,也能大大地提高程序的速度。

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

   还能用FSO做什么?

   在FSO中还有许多很棒的功能,但许多人没有意识到。这些功能常常是在你感到做某些事情很难后才发现的,这时你经常要感叹到:要是我早知道这个方法就好了!

   下面列举一下这些不常用但是却非常酷的功能:

   很少被了解的FSO功能
GetSpecialFolder Method 返回特定的Windows文件夹的路径: 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的功能很强大,这里介绍的仅仅是冰山一角。你可以使用FSO建立功能强大的应用程序,简单地完成许多任务。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章