5

使用 cfdirectory 时,如何排除所有 cfm 文件并列出所有其他文件而不指定我想要查看的所有文件的文件扩展名,或者在不进行查询查询的情况下排除 index.html 等特定文件?

我正在寻找类似以下的内容,请注意 filter 属性。

<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">
4

5 回答 5

6

不,不能单独使用cfdirectory排除文件。*filter 属性仅使用 DOS 风格的通配符 (和)指定要包含的文件?

最简单的解决方案可能是使用 cfquery 进行事后过滤。

<cfquery name="qryFiles" dbtype="query">
    SELECT * FROM qryFiles
    WHERE name not like '%.cfm'
</cfquery>
于 2009-07-06T21:06:12.837 回答
6

如果您尝试进行排除,则 filter 属性是无用的。恰当的例子:就在昨天,我想使用 cfdirectory 来获取所有子目录,但排除任何以句点“。”开头的目录。这样我就可以排除“.svn”和“.git”之类的东西。不用说,我到处搜索,找不到答案。

最后,我只在循环中使用了一些条件逻辑:

<cfloop query="mydir">
  <cfif left(name, 1) neq ".">
    <!--- do some code --->
  </cfif>
</cfloop>

这完成了工作。当然,我可以使用 QoQ,但对我来说,添加所有开销来过滤以句点开头的目录似乎很愚蠢。

底线是,是的,当谈到使用 cfdirectory 进行排除过滤时,我们被搞砸了,但是没有理由你不能使用你的想象力和一点代码来获得你想要的结果。

于 2009-07-07T11:45:20.277 回答
2

您可以创建一个运行 CF 目录的自定义标记,然后循环遍历结果(就像您所做的那样)构建一个新的查询或一个包含结果的结构。这会使在其他情况下的可重用性稍高一些。

于 2009-07-07T11:59:11.840 回答
1

有可能在 java 对象中使用..

CreateObject("java", "java.io.File");  

..和一个文件名过滤器

就个人而言,我认为您最好只使用查询查询。

于 2009-07-06T21:09:44.717 回答
0

我很确定!运算符在过滤器参数中不起作用。

我看不到一种方法可以绕过查询查询或使用 cfoutput/cfloop 循环查询,然后使用 cfif/cfcase 语句检查每个文件名的值,看看您是否希望它显示出来。

于 2009-07-06T20:59:40.823 回答