◎请教一个循环(递归),读出所有目录树中文件的问题,谢了!
有两个数据表,
1.节目表ProgramInfo,有两个字段:ProgramID(节目ID)、DirID(目录ID)
2.目录表Directory,有两个字段:DirectoryID(目录ID,对应节目表ProgramInfo中的DirID),ParentID(父目录ID,如果是根目录则为0)
现在需要读出整个目录结构中,所有的文件,请问应该如何用asp实现?
我写的函数只能读出两级目录中的所有文件:
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '递归读目录
Function SearchChildDir(DirID)
dim RecSet,strSql,counter,StrDir
counter=0
Set RecSet = Server.CreateObject( "ADODB.Recordset ")
strSql = "SELECT DirectoryID FROM Directory where ParentID= "&DirID& " ORDER BY DirectoryID DESC "
RecSet.Open strSql,VODDbConn,adOpenKeyset,adLockReadOnly,adCmdText
Do While Not RecSet.EOF
StrDir = StrDir & " or dirid= "&RecSet( "DirectoryID ") RecSet.MoveNext
counter=counter+1
Loop
RecSet.close()
set RecSet=nothing
SearchChildDir = StrDir
end Function
请大家帮我看看,谢谢了!
------解决方案--------------------帮顶了。一看树就头痛啊
------解决方案--------------------你的递归思路不对,总的来说,递归程序的思路应该类似下面的描述:
Function SearchChildDir(DirID)
得到以DirID为根据的记录集oRs1
while (not oRs1.EOF)
call SearchChildDir(oRs1( "DirID "))
wend
结束处理
end function
这样才能形成递归过程,你上面的好象没有形成递归
------解决方案--------------------这是我写的asp版的站点地图生成的代码,我试过的完全可以按照你的要求找出所有文件,关键就在过程自身调用自身的地方,你可以参考一下,我自己没时间再做优化。
<%
dim i,not_list,file_type,url_1,url_2
dim FSO,FSO2,FSO3,Folder,Folder2,Item,File
dim sitemap_body,Moban,mapbegin,mapend
i=0
url_1=Lcase(Server.MapPath( ". "))
url_2=Lcase( "http:// "& Request.ServerVariables( "SERVER_NAME "))
call list_file(url_1)
call folder_list(url_1)
Moban = mapbegin& sitemap_body & mapend
Set fso = Server.CreateObject( "Scripting.FileSystemObject ")
Set fout = fso.CreateTextFile(Server.MapPath( ". ")& "\sitemap.xml ")
fout.Write Moban
set fso=nothing
set fout=nothing
Moban= " "
sitemap_body= " "
response.write " <br> <a href=sitemap.xml target=_blank> sitemap.xml </a> 文件已经生成,其中共收录了 "& i & "个文件链接,所有链接地址如上。 "
response.Flush()
'列出指定目录下的所有目录
sub folder_list(path)
Set FSO = CreateObject( "Scripting.FileSystemObject ")
Set Folder = FSO.GetFolder(path)
Set FSO2=Folder.SubFolders
For Each Item In FSO2
call list_file(trim(path& "\ "&Lcase(Item.Name)))
call folder_list(path& "\ " & Lcase(Item.Name))
Next
Set FSO = Nothing
Set FSO2 = Nothing
Set Folder = Nothing
end sub
'列出指定目录下的所有文件
sub list_file(path)
Set FSO3 = CreateObject( "Scripting.FileSystemObject ")
Set Folder2 = FSO3.GetFolder(path)
For Each File In Folder2.Files
sitemap_body=sitemap_body& " "& vbcrlf & " <url> "& vbcrlf & " <loc> "& replace(replace_url(path & "\ " & Lcase(File.Name)), "& ", "& ") & " </loc> "& vbcrlf &