下面我们用一个ASP生成HTML文件的实例来介绍FSO……
Copy下面这段代码存成ASP文件,在可以支持FSO组件的服务器上运行,实现的主要效果是,运行后点击确定先在当前目录下生成一个GAMVAN.HTM文件,然后向这个HTM文件内添加自由定制内容!
<% IF request.Form("action") = "生成文件" then Set fs = Server.CreateObject("Scripting.FileSystemObject")'建立对象 Set f = fs.CreateTextFile(Server.MapPath(".")&"\GAMVAN.htm",true)'新建文件指明文件如果存在该方法将覆盖存在的同名文件! end if if Request.Form("act") = "添加内容" then Set fs = Server.CreateObject("Scripting.FileSystemObject")'建立对象 txt = Request.Form("txt") Set f = fs.OpenTextFile(Server.MapPath(".")&"\GAMVAN.htm",8) f.Writeline(txt & " & nbsp; <br><br>by www.GAMVAN.com") Response.Write "<a href=javascript:history.go(-1)>添加内容成功啦!</a>" Response.End end if %> <form action="" method="post" name="action" id="action"> <input name="action" type="submit" id="action" value="生成文件"> </form> <hr size="1"> <form name="form1" method="post" action=""> <textarea name="txt" cols="50" rows="8" id="txt"></textarea> <input name="act" type="submit" id="act" value="添加内容"> </form> |
其中Set f = fs.CreateTextFile(Server.MapPath(".")&"\GAMVAN.htm",true)一句代码中CreateTextFile就是FileSystem对象的其中一个属性,表示新建文件他后面是有参数的,CreateTextFile(FileName[,Overwrite[,Unicode]]) 其中中括号[]括起来的部分表示可选参数,它是有缺省值的,FileName表示新建文件的名字,OverWrite表示如果新建文件存在此方法是否覆盖已存在的文件,它的值为true或者false,缺省值为False表示不覆盖。Unicode的值也是true或者false,他的缺省值也是False表示创建的字符集为ASCII,否则创建的字符集则为Unicode。
在上面创建文件的程序中我们用到了一个函数:Server.MapPath其实这个就是把程序中的相对路径转化为服务器的实际路径,为什么要转化呢,因为FSO在打开、新建文件或文件夹的时候必须使用服务器的实际路径作为参数,而Server.MapPath(".")就是代表程序所在的目录。而如果是在当前目录的下一层目录则可以直接写成Server.MapPath("Foldername")。如果是在当前目录的上一层目录则是写成Server.MapPath("../Foldername")。其实联想起来那些靠ASP自动生成静态页面的新闻发布系统其基本原理就是这个!无非新闻发布系统的文件名是不同的、唯一的,就是上面的程序红色的部分就是文件名,这里我们可以给出一个提示你如果是在作一个新闻发布系统可以以当前的时间作为文件名,这样的话就绝对不会出现文件同名的现象情况了!
了解了CreateTextFile后你一定开始感慨ASP的FSO原来功能是如此地强大,,其实FileSystem还有一些列的属性方法,使用方法了上面的例子大同小异,这里我们就用罗列出来不再举例说明了:
CopyFileSource,Destination[,Overwrite]其中中括号[]括起来的部分表示可选参数,
从Source向Destination拷贝一个或多个文件。在Source中指定的路径是可以包含通配符的,使用通配符可以一次拷贝多个文件。但是在使用通配符的情况下如果没有一个文件与之匹配,该方法就会发生错误。Overwrite的值为ture或者false,缺性时是true,表示覆盖已经存在的文件,反之……。但是这个方法不会覆盖那些具有只读属性的文件。
CreateFolder Foldername
新建文件夹,文件夹名为Foldername,如果文件夹已存在,则会在执行时产生错误。
DeleteFile Filespec[,Force]
删除一个或者多个文件,Filespec指名要删除的文件。Filespec可以包含通配符,Force表示是否强制删除具有只读属性的文件,值为ture、false,缺省时为false。
DeleteFolder Folderspec[,Force]
删除一个或多个文件夹。Folderspec表示要删除的文件夹,它也可以包含通配符,符合通配符条件的文件夹可以一次行删除。
DriveExists(Drivespec)
假如由Drivespec指名的驱动器存在,返回值为ture。否则的话返回值为false。
举例如:
Dim fs, t Set fs = Server.CreateObject("Scripting.FileSystemObject") t = "c" if fs.DriveExists(t) then Response.Write "驱动器" & t & " 存在" else Response.Write "驱动器" & t & " 不存在!!!" end if |
FileExists(Filespec)
假如由FileSpec指明的文件夹存在,返回值为true;否则返回False。
FolderExists(Filespec)
假如由Filespec指明的文件加存在则返回TRUE,否则返回FALSE。
GetAbsolutePathName(Pathspec)
返回由Pathspec指名部分路径的完全文件路径。
GetBaseName(Path)
从一个由Path指名的全路径中返回文件名 (无扩展名)
GetExtensinName(Path)
从一个由Path指名的全路径中返回文件的扩展名。
GetFile(Filespec)
返回代表Filespec的File对象。
GetFileName(Pathspec)
从一个由Pathspec指明的全路径中返回文件名和扩展名。
GetFolder(Folderspec)
返回代表Folderspec的Folder对象。
GetParentFolderName(Path)
返回由包含Path指明的文件或者文件夹的文件夹。
GetSpecialFolder(Folderspec)
返回由Folderspec指明的文件夹。Folderspec的值可以是如表所示的之中的任何一个:
VB常量 | 值 | 含义 |
windowFolder | 0 | Windows文件夹 |
SystemFolder | 1 | 系统文件夹 |
TemporaryFolder | 2 | 临时文件夹 |
GetTempName
这个方法返回一个随机产生的唯一的文件名。这个文件名可以和CreteTextFile()或CreateFolder()
方法一起使用,用于创建具有唯一名称的临时文件或者文件夹。
MoveFile Source, Destination
从Source向Destination一定一个或多个文件。 Source可以包含通配符。假如Source包含通配符,
该方法可以一次移动多个和通配符相应的文件。
MoveFolder Source, Destination
从Source向Destination移动一个或者多个文件夹。Source可以包含通配符。假如Source包含通配符,
该方法可以一次移动多个和通配符相应的文件。
OpenTextFile(FileName[,ioMode[,create[,format]]]) 总括号内为可选参数
打开一个用于读或添加的文件并创建一TextStream对象。要打开的文件为FileName。iomode确定要打开文件的操作类型。
iomode可以具有如下表所示的两个值
VB常量 | 值 | 含义 |
ForReading | 1 | 打开文件用于读 |
ForAppending | 8 | 打开文件用于添加 |
Create 指明如果指定的文件不存在是否创建该文件,假如Create的值为TRUE,常见新文件;
否则不创建。Create的缺省值为false。
format确定文件的字符集。format具有如下表是列出的值:
VB常量 | 值 | 含义 |
TristateUseDefault | 2 | 使用系统缺省的字符集 |
TristateTrue | 1 | 使用Unicode形式 |
TristateFalse | 0 | 使用ASCII形式 |
FSO的一些列属性如下:
Drivers 返回本地机器的Drivers集合。
TextSteam 对象用于读写文本文家,TextSteam 对象可以用如下语句创建:
#39;在当前目录下新建文件GAMVAN.htm |
使用TextSteam的方法可以很容易地操作文本文件
TextSteam 的方法属性:
方法:
Close 关闭打开的文本流文件
Read(characters) 文件中一定数量的字符,并把它写入到一字符中。
RealAll 读取整个文本流文件(可能很大),并把它写入到字符串中。
ReadLine 读取文本流文件的一行,并把它写入到字符串中。不包含新行符。
Skip(characters) 跳过文本流文件中指定的数目的字符。
Skipline 跳过文本文件的一行。
Write(String) 往文本流文件内写入字符串,不包含新行符。
WriteBlankLine(lines) 往文本流文件内写入指定数目的空行(新行符)。
WriteLine([String]) 往文本流文件内写入包含新行符的字符串。
属性
AtEndOfLine 如果遇到新行符,返回值TRUE;否则返回值为FALSE。
AtEndOfStream 如果到达文本流文件的结尾时,返回值为True,
否则返回值为False。
Column 返回当前列在文本流文件中的列位置。
Line 返回当前行在文本流文件中的行位置。
下面是一个利用FSO创建文件,和向里面写入数据的实例教程!
<% Dim fs, serverPath, filePath, txts Set fs = Server.CreateObject("Scripting.FileSystemObject") ForAppending = 8 '打开用于读写 serverPath = Server.MapPath(".") '映射系统物理路径,Server.MapPath(".")表示当前目录 filePath = serverPath & "\GAMVANfile\" '获取物理路径在是新建文件存在当前目录下GAMVANfile文件夹里面! if not fs.FolderExists(filePath) then fs.CreateFolder(filePath) end if '检测文件夹是否存在,没有则自动创建! txts = "<hr height='1'>春眠不觉晓,<br>处处蚊子咬!"&_ "<br><br><a href=''>www.GAMVAN.com</a>"&_ "<br><br>更新时间:" & now() & "<hr>" Dim f, fName fName = filePath&"GAMVAN.htm" if fs.FileExists(fName) then Set f = fs.OpenTextFile(fName, ForAppending, True) else Set f = fs.CreateTextFile(fName, ForWriting, false) end if '上面七行代码是判断fName文件是否存在如果存在就打开它用于读写,否则就自动创建 f.Write(txts) f.Close Set f = Nothing Response.Write fName & " 创建成功!" %> |
其实上面这个代码就是静态网站发布系统的最原始的原理,那些可以生成HTML的新闻发布系统都是依循这个原理设计的……
关于TextSteam其他属性方法就是大同小异,依此例类推即可!
以上源代码在 WIN XP + IIS5.0 测试通过!
先来看方法:
Copy Destination[,OverWrite] (中括号内为可选参数)
把文件拷贝到一个新的路径下。Destination 就是新路径。Overwrite的值为TURE或者FALSE;当Overwrite的值为TRUE时,如果在目标路径下的已经存在相同的文件名,该方法覆盖此文件;反之如果为FALSE,则会发生错误。缺省时Overwrite的值为TRUE。
Delete[Force]
删除文件,Force指明是否删除具有只读属性的文件,Force的缺省值为FALSE,表示不删除具有只读属性的文件,如果为TRUE则表示强行删除只读文件。
Move Destination
把文件移动到新目录下,Destination是移动目标文件的路径。
OpenAsTextStream(iomode,[,format])
打开一个文件,是该文件可以用于读、写、添加。iomode决定可以用在打开文件上的操作类型。iomode具有如下表所示的值:
VB常量 | 值 | 含义 |
ForReading | 1 | 打开文件用于读数据 |
ForWriting | 2 | 打开文件用于写数据 |
ForAppending | 8 | 打开文件用于添加数据 |
Format决定文件的字符集。Format具有如下表所示的值:
VB常量 | 值 | 含义 |
TristateUseDefault | 1 | 使用系统缺省的字符集 |
TristateTrue | 1 | 以Unicode形式打开文件 |
TristateFalse | 0 | 以ASCII形式打开文件 |
属性:
Attributes
指明文件的属性。这个性质具有如下表所示的值:
VB常量 | 值 | 含义 |
Normal | 0 | 无属性集 |
ReadOnly | 1 | 读/写属性 |
Hidden | 2 | 读/写属性 |
System | 4 | 读/写属性 |
Volumn | 8 | 只读属性 |
Directory | 16 | 只读属性 |
Archive | 32 | 读/写属性 |
Alias | 64 | 只读属性 |
Compressed | 128 | 只读属性 |
DateCreated 返回文件的创建时间。该属性只读。
DateLastAccessed 返回文件最后一次访问的时间。该属性只读。
DateLastModified 返回文件最后一次修改的时间。该属性只读。
Drive 返回文件所在的驱动器。该属性只读。
Name 指明文件的文件名,该属性可读又可设置。
ParentFolder 返回该文件的文件夹。
Path 返回该文件的路径。
ShortPath 返回文件的短路径名。
Size 返回该文件的大小,以字节为单位。
Type 返回文件类型,可能的值包括Text文本,ASP文件及Internet文档(html)
以上是File对象的属性和方法,下面大家将看到Folder对象的属性和方法
下面的语句获取一个Folder对象:他能得到指定的文件夹的信息和对指定的文件夹进行各种操作
Set fs = Server.CreateObject("Scripting.FileSystemObject") Set ft = fs.GetFolder(Server.MapPath("/GAMVAN/pic") |
关于Folder的方法:
Copy Destination[,Overwrite]
把文件拷贝到由Destination指定的路径下。假如Overwrite为TRUE,则已存在的文件或文件夹将会被覆盖;反之如果Overwrite的值为FALSE(缺省)则不进行覆盖。
CreateTextFile(Filename[,Overwrite[,Unicode]])
新建一个文件并返回TextStream对象。Filename是新建文件的文件名。Overwrite指明是否对已存在的文件进行覆盖操作。Overwrite的值可以是TRUE或FALSE(缺省值为FALSE)。如果Unicode得值为TURE,以Unicode字符集创建文件;如果Unicode得值为FALSE,则以ASCII形式创建文件。
Delete Force
删除文件夹。Force的值为TRUE,即使文件夹的属性为只读,同样进行删除;缺省时Force的值为FALSE。
Move Destination
把文件架移动到由Destination指定的新路径。
关于属性:
Attributes
指明文件夹的属性。
DateCreate
返回该文件夹的创建日期。该属性为只读。
DateLastAccessed
返回最后一次访问该文件的日期,该属性只读。
DateLastModified
返回该文件夹最后一次修改的日期,该属性只读。
Drive
返回该文件夹所在的驱动器,该属性只读。
IsRootFolder
如果目前的文件夹为根文件夹,返回值为TRUE;否则返回值为FALSE。
Name
指明文件夹的名称,该属性可读也可以设置。
ParentFolder
返回代表当前文件夹的上一级文件夹的Folder对象。
Path
返回文件夹的路径。
ShortName
返回文件夹的短名称。
ShortPath
返回文件夹的短路径。
Size
返回包含当前文件夹内的所有的文件和文件夹的大小,以字节为单位。
SubFolders
返回包含在当前文件夹内的所有子文件夹的Folders集合。
关于集合:
Folders
Folders集合又在一指定文件夹内的所有文件夹的集合组成。
Set fs = Server.CreateObject("Scripting.FileSystemObject") Set fd = fs.GetFolder(Server.MapPath("/GAMVAN/pic") Set fds = fd.SubFolders |
Driver对象的方法属性较少,我们就在这里一并介绍了吧,他同样是通过FSO创建:
Set fs = Server.CreateObject("Scripting.FileSystemObject") Set fd = fs.GetDrive("c:") |
关于属性:
AvailableSpace
返回在一驱动器和网络共享上剩余的可用空间。
DriveType
返回指明某一驱动器性质的数字,代表这些性质的数字如表:
值 | 含义 |
0 | 未知 |
1 | 可移动的 |
2 | 固定的 |
3 | 远程的 |
4 | CD-ROM |
5 | RAM盘 |
DriverLetter
返回某一驱动器或网络共享的驱动字符。
FileSystem
返回指定的驱动器使用的文件系统。可能的返回值包括NTFS和FAT。
FreeSpace
返回在一网络共享或驱动器上的可用空间。
isReady
指明某一特殊的驱动器,比如CD-DOM或可移动盘符驱动器,目前是否可用。该属性的值为TRUE或FALSE。
Path
返回指定的驱动器路径。
RootFolder
返回一表示指定驱动器根文件夹的文件夹对象。
SerialNumber
返回磁盘卷的唯一序列号。
ShareName
返回指定的驱动器的网络共享名。
TotalSize
以字节为单位返回指定驱动器或网络共享的大小。
VolumName
指定驱动器的卷标名称。这个属性即可以设置,又可以读取。包含了所有可用的驱动器的Driver集合可以通过FilesSystemObject对象获得。