日期:2014-05-17  浏览次数:20967 次

◎请教一个循环(递归),读出所有目录树中文件的问题,谢了!
有两个数据表,

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)), "& ", "&amp; ") & " </loc> "& vbcrlf &