Code archives/File Utilities/Directory Factory
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This is an object-oriented replacement for the standard ReadDir() and NextFile() commands. An HTTP directory factory will try to get all the files in a web folder. The folder must not have an index.htm file. | |||||
Strict
Import brl.filesystem
Import brl.HTTPStream
Import brl.linkedlist
Private
Global directory_factories:TDirectoryFactory
Public
Function ReadDirectory:TList(path$)
Local factory:TDirectoryFactory=directory_factories
Local proto$
Local i=path.Find( "::",0 )
If i>-1
proto$=path[..i].ToLower()
path$=path[i+2..]
EndIf
While factory
Local list:TList=factory.Read(proto,path)
If list Return list
factory=factory._succ
Wend
EndFunction
Type TDirectoryFactory
Field _succ:TDirectoryFactory
Method New()
_succ=directory_factories
directory_factories=Self
End Method
Function Read:TList(proto$,path$)
If proto<>"" Return
path=RealPath(path)
Local list:TList
Local d=ReadDir(path)
If Not d Return
list=New TList
Local file$
Repeat
file=NextFile(d)
If Not file Exit
list.addfirst(file)
Forever
CloseDir d
Return list
EndFunction
EndType
New TDirectoryFactory
Type THTTPDirectoryFactory Extends TDirectoryFactory
Function Read:TList(proto$,path$)
If proto<>"http" Return
Local stream:TStream=ReadStream(proto+"::"+path)
If Not stream Return
Local s$
While Not stream.Eof()
s:+stream.ReadLine()+"~n"
Wend
Return ExtractHTMLLinks(s)
EndFunction
Function ExtractHTMLLinks:TList(html$)
Local list:TList=New TList
html=html.tolower()
Local sarr$[]
sarr=html.split("href=")
For Local n=1 To sarr.length-1
Local sarr2$[]
sarr[n]=sarr[n].Trim()
sarr2=sarr[n].split("~q")
If sarr2.length>1
If Not sarr2[1].contains("?")
list.addfirst(sarr2[1])
'Print sarr2[1]
EndIf
EndIf
Next
Return list
EndFunction
EndType
New THTTPDirectoryFactory |
Comments
None.
Code Archives Forum