使用cfdirectory时,如何在不指定我想要查看的所有文件的文件扩展名的情况下排除所有cfm文件并列出所有其他文件,或者在不执行查询查询的情况下排除特定文件(如index.html)?
我正在寻找类似下面的内容,请注意过滤器属性。
<cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!index.html" sort="name ASC" listinfo="name">
或:
<cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!*.cfm" sort="name ASC" listinfo="name">
答案 0 :(得分:6)
不,仅使用cfdirectory排除文件是不可能的。 filter属性仅指定要包含的文件,使用DOS样式通配符(*
和?
)。
最简单的解决方案可能是在事后用cfquery过滤。
<cfquery name="qryFiles" dbtype="query">
SELECT * FROM qryFiles
WHERE name not like '%.cfm'
</cfquery>
答案 1 :(得分:6)
如果您尝试排除,则过滤器属性无效。举个例子:就在昨天我想使用cfdirectory来获取所有子目录,但是 EXLCUDE 以句点“。”开头的任何目录。这样我就可以排除“.svn”和“.git”之类的内容。毋庸置疑,我搜遍了整个地方,找不到答案。
最后,我最终在循环中使用了一些条件逻辑:
<cfloop query="mydir">
<cfif left(name, 1) neq ".">
<!--- do some code --->
</cfif>
</cfloop>
完成了这项工作。当然我可以使用QoQ,但对我来说,添加所有开销来过滤掉以句号开头的目录似乎很傻。
底线是,是的,我们在使用cfdirectory进行排除过滤时遇到了麻烦,但是没有理由不能用你的想象力和一些代码来获得你想要的结果。
答案 2 :(得分:2)
您可以创建一个自定义标记,该标记运行CF目录,然后循环结果(就像您一样)构建一个新查询或结果的结构。这将在其他情况下稍微更容易重复使用。
答案 3 :(得分:1)
可以在带有..
的java对象中执行此操作CreateObject("java", "java.io.File");
..和 filename filter
就个人而言,我认为只使用查询查询会更好。
答案 4 :(得分:0)
我很确定!运算符不适用于filter参数。
我没有看到通过cfoutput / cfloop查询查询或循环查询,然后使用cfif / cfcase语句检查每个文件名的值以查看是否要显示起来。