我正在尝试使用 CFDirectory 获取在 ColdFusion Admin 中创建的映射的文件列表。到目前为止,我无法填充列表,但如果我引用物理路径,则会显示完整的文件列表。
这是我正在使用的代码:
<cfoutput>
<cfdirectory action="list" directory="mymapping" name="test"><cfdump var="#test#">
</cfoutput>
谢谢,
乔恩·C。
我正在尝试使用 CFDirectory 获取在 ColdFusion Admin 中创建的映射的文件列表。到目前为止,我无法填充列表,但如果我引用物理路径,则会显示完整的文件列表。
这是我正在使用的代码:
<cfoutput>
<cfdirectory action="list" directory="mymapping" name="test"><cfdump var="#test#">
</cfoutput>
谢谢,
乔恩·C。
根据映射的设置方式 - 您可能需要为其提供完整的“虚拟”路径:
<cfdirectory action="list" directory="/mapping/folder" name="test">
<cfdump var="#test#">
You need to use the form /mymapping
, with the /
in front. And you need to use ExpandPath
to expand the “virtual” directory as defined in the mapping /mymapping
. That way, you end up using cfdirectory
and passing in a physical directory, one that actually exists on the hard drive and not just in the ColdFusion mappings.
<cfdirectory
name = "theQuery"
action = "list"
directory = "#ExpandPath("/mymapping")#"
/>
试试这个(未测试):
<cfset expandedPath=getDirectoryFromPath(expandPath("/mymapping/*.*")) />
<cfdirectory action="list" directory="#expandedPath#" name="dirListing" />
<cfdump var="#dirListing#" />
如果您在名为“mymapping”的变量中设置目录。如下所示:
<cfdirectory action="list" directory="#mymapping#" name="test">
<cfdump var="#test#">
您没有说您使用的是哪个版本的 CF,因此 Goyix 的解决方案部分正确:它适用于 Railo,但不适用于 ACF。
在 ACF8+ 中,您可以使用 ServiceFactory 来提取真实路径。代码可能如下所示:
<cfset mapping = "/fusebox5" />
<cfset serviceFactory = createObject("java","coldfusion.server.ServiceFactory") />
<cfset mappings = serviceFactory.runtimeService.getMappings() />
<cfif StructKeyExists(mappings, mapping)>
<cfdirectory action="list" directory="#mappings[mapping]#" name="test">
<cfdump var="#test#">
<cfelse>
<p>Mapping not found</p>
</cfif>
注意:使用我现有的 FB5 映射进行测试。
编辑
稍后提出的带有 ExpandPath 的方法要清晰得多。仅将此作为可能有用的替代解决方案。