1.5.2 文件夹操作
表1-7列出了文件夹常用操作的对应方法。
表1-7 文件夹常用操作的方法
1. 创建文件夹
创建文件夹可以使用FSO对象的CreateFolder方法,或使用文件夹集合的Add方法,参数就是要创建的文件夹。
创建文件夹之前,应该先判断该文件夹是否已经存在,使用FolderExists方法即可。存在的话就不要创建了,否则会报错。
范例程序如下所示。
FolderCreate.asp
<%@codepage=936%> <% Response.Charset = "GBK" '当前目录下的FolderCreateTest文件夹 folderPath = Server.MapPath(".") & "\FolderCreateTest" folderPath2 = Server.MapPath(".") & "\FolderCreateTest2" Set fso = CreateObject("Scripting.FileSystemObject") '判断文件夹是否存在 If Not fso.FolderExists(folderPath) Then '创建文件夹 Set newFolder = fso.CreateFolder(folderPath) Response.Write newFolder.Path & "<br>" Else Response.Write "文件夹已存在。" End If '判断文件夹是否存在 If Not fso.FolderExists(folderPath2) Then Set folder = fso.GetFolder(Server.MapPath(".")) '创建文件夹 Set newFolder = folder.SubFolders.Add("FolderCreateTest2") Response.Write newFolder.Path Else Response.Write "文件夹已存在。" End If Set fso = Nothing %>
如果想一次创建多层的文件夹,那么,很遗憾,没有什么好办法,只能一层一层地创建。
2. 复制文件夹
复制文件夹可以使用FSO对象的CopyFolder方法或Folder对象的Copy方法,格式如下:
fso.CopyFolder 源文件夹,目标文件夹,是否覆盖同名文件夹 folder.Copy 目标文件夹,是否覆盖同名文件夹
两个方法是类似的,只是前者需要指定源文件夹,而后者的folder变量就代表着源文件夹。是否覆盖同名文件夹,这个参数默认是True,即覆盖,如果是False,若存在同名文件夹,则报错。
下例将通过两个方法,将FolderCopyA文件夹复制为FolderCopyB和FolderCopyC。
FolderCopy.asp
<%@codepage=936%> <% Response.Charset = "GBK" '注意目标路径结尾的反斜杠的作用 folderPathA = Server.MapPath(".") & "\FolderCopyA" folderPathB = Server.MapPath(".") & "\FolderCopyB\" folderPathC = Server.MapPath(".") & "\FolderCopyC" Set fso = CreateObject("Scripting.FileSystemObject") '将FolderCopyA目录复制到FolderCopyB下面 fso.CopyFolder folderPathA, folderPathB, True '覆盖同名文件夹 '将FolderCopyA目录复制为FolderCopyC fso.CopyFolder folderPathA, folderPathC, True '也可以通过Folder对象来操作 Set folder = fso.GetFolder(folderPathA) folder.Copy folderPathB, True folder.Copy folderPathC, True Set fso = Nothing %>
请注意目标路径结尾的反斜杠的作用。如果目标路径以反斜杠结尾,则认为该路径是已经存在的,源文件夹将被复制到该路径下面,否则,源文件夹将被复制为路径指定的名字。此例运行后,几个文件夹的层次结构如下:
在CopyFolder方法中,指定源文件夹可以使用通配符,从而实现多个文件夹的批量复制。
通配符可以用“? ”和“*”,前者代表单个字符,后者代表任意多个字符。如“a? b. txt”表示“a”开头,然后是任意一个字符(也可以是0个字符,即没有字符),然后是“b.txt”这样的文件名;而“a*b.txt” 表示“a”开头,然后是任意多个字符(也可以没有),然后是“b.txt”这样的文件名。
通配符只能在路径的最后部分使用,如“c:\aa\bb\admin_*”是可以的,而“c:\aa\*\admin_*”是不行的。
通配符不能在目标文件夹上使用。
3. 移动文件夹
移动文件夹可以使用FSO对象的MoveFolder方法或Folder对象的Move方法,格式如下:
fso.moveFolder 源文件夹,目标文件夹 folder.Move 目标文件夹
同样,如果目标路径以反斜杠结尾,则认为该路径是已经存在的,源文件夹将被移动到该路径下面,否则,源文件夹将被移动为路径指定的名字。前一种情况下,要求目标文件夹必须已经存在,后一种情况下,则要求目标文件夹一定不能存在,移动文件夹并不会覆盖已有的同名文件夹。
移动文件夹兼有重命名的作用,如以下语句将把FolderA重命名为FolderB。
fso.MoveFolder "C:\aa\FolderA", "C:\aa\FolderB"
下例将把FolderMoveA文件夹改名为FolderMoveB,然后将它移动到FolderMoveC下面。
FolderMove.asp
<%@codepage=936%> <% Response.Charset = "GBK" '注意目标路径结尾的反斜杠的作用 folderPathA = Server.MapPath(".") & "\FolderMoveA" folderPathB = Server.MapPath(".") & "\FolderMoveB" folderPathC = Server.MapPath(".") & "\FolderMoveC\" Set fso = CreateObject("Scripting.FileSystemObject") '将FolderMoveA目录移动为FolderMoveB '源文件夹必须存在,而目标文件夹必须不存在 If fso.FolderExists(folderPathA) And Not fso.FolderExists(folderPathB) Then fso.MoveFolder folderPathA, folderPathB Else
Response.Write "源文件夹不存在,或目标文件夹已存在" Response.End End If '再将FolderMoveB目录移动到FolderMoveC下 '源文件夹必须存在,而目标文件夹也必须存在 If fso.FolderExists(folderPathB) And fso.FolderExists(folderPathC) Then fso.MoveFolder folderPathB, folderPathC Else Response.Write "源文件夹不存在,或目标文件夹不存在" Response.End End If Set fso = Nothing %>
MoveFolder方法也支持批量移动,当然,只能将多个文件夹移动到某个已存在的文件夹下面。如下面语句将把以“a”开头的文件夹都移动到以“b”开头的文件夹下。
fso.MoveFolder "C:\a*", "C:\b"
4. 删除文件夹
删除文件夹可以使用FSO对象的DeleteFolder方法或Folder对象的Delete方法,格式如下:
fso.deleteFolder 文件夹,是否强制删除 folder.Delete 是否强制删除
如果想删除只读的文件夹,应该将“是否强制删除”这个参数置为True,它默认是False。
下例将删除当前目录下的FolderDeleteA文件夹。
FolderDelete.asp
<%@codepage=936%> <% Response.Charset = "GBK" '要删除的文件夹 folderPathA = Server.MapPath(".") & "\FolderDeleteA" Set fso = CreateObject("Scripting.FileSystemObject") '判断文件夹是否存在 If fso.FolderExists(folderPathA) Then fso.DeleteFolder folderPathA, True '删除只读文件夹 Else Response.Write "文件夹不存在"
End If Set fso = Nothing %>
DeleteFolder方法也支持批量删除,如下面语句将删除C盘根目录下的以“a”开头的所有文件夹。
fso.DeleteFolder "C:\a*", True