<CFFUNCTION name="getDirectoryData">
<CFARGUMENT name="directory" required="yes">
<!--- ensure the query is private by initializing it with VAR, since we'll most likely be recursing --->
<CFSET var qryDirectoryData = QueryNew("ATTRIBUTES,DATELASTMODIFIED,MODE,NAME,SIZE,TYPE")>
<CFDIRECTORY ACTION="LIST" DIRECTORY="#directory#" NAME="qryDirectoryData" SORT="name">
<CFLOOP QUERY="qryDirectoryData">
<CFSET QueryAddRow(qryTreeData)>
<CFSET QuerySetCell(qryTreeData,"value","#directory##qryDirectoryData.name#/")>
<CFSET QuerySetCell(qryTreeData,"display","#qryDirectoryData.name#")>
<CFSET QuerySetCell(qryTreeData,"parent","#directory#")>
<CFSET QuerySetCell(qryTreeData,"type","#lCase(qryDirectoryData.Type)#")>
<CFIF CompareNoCase(qryDirectoryData.Type,"dir") EQ 0>
<CFSET getDirectoryData("#directory##qryDirectoryData.name#/")>
</CFIF>
</CFLOOP>
<CFRETURN true>
</CFFUNCTION>
<CFSET sRootDirectory = "/full/directory/path/">
<!--- or sRootDirectory = ExpandPath(".") to start at the current directory --->
<!--- establish a global query --->
<CFSET qryTreeData = QueryNew("value,display,parent,type")>
<CFSET getDirectoryData(sRootDirectory)>
<CFIF qryTreeData.RecordCount GT 0>
<CFFORM ACTION="somepage.cfm" METHOD="POST" ENABLECAB="Yes">
<CFTREE NAME="fileTree" LOOKANDFEEL="Windows" BOLD="No" ITALIC="No" BORDER="Yes" HSCROLL="Yes" VSCROLL="Yes" REQUIRED="No" COMPLETEPATH="No" APPENDKEY="Yes" HIGHLIGHTHREF="Yes">
<CFLOOP query="qryTreeData">
<CFTREEITEM VALUE="#qryTreeData.value#" DISPLAY="#qryTreeData.display#" PARENT="#qryTreeData.parent#" QUERYASROOT="No" EXPAND="Yes">
</CFLOOP>
</CFTREE>
</CFFORM>
</CFIF>