Coldfusion 是否可能以某种方式排除带有cfdirectory的文件?

Coldfusion 是否可能以某种方式排除带有cfdirectory的文件?,coldfusion,cfdirectory,Coldfusion,Cfdirectory,使用cfdirectory时,如何排除所有cfm文件并列出所有其他文件,而不指定要查看的所有文件的文件扩展名,或者如何排除特定文件(如index.html),而不进行查询 我正在寻找如下内容,请注意filter属性 <cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!index.html" sort="name ASC" listinfo="name"> 或: 我非

使用cfdirectory时,如何排除所有cfm文件并列出所有其他文件,而不指定要查看的所有文件的文件扩展名,或者如何排除特定文件(如index.html),而不进行查询

我正在寻找如下内容,请注意filter属性

<cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!index.html" sort="name ASC" listinfo="name">

或:


我非常肯定!操作员将不会在过滤器参数中工作


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

不,不可能仅使用cfoutput/cfloop来排除文件。filter属性仅指定要包含的文件,带有DOS样式的通配符(
*

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

<cfquery name="qryFiles" dbtype="query">
    SELECT * FROM qryFiles
    WHERE name not like '%.cfm'
</cfquery>

从qryFiles中选择*
其中名称与“%.cfm”不同

在java对象中,可以使用

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


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

如果您试图进行排除,则filter属性是无用的。举个例子:就在昨天,我想使用cfdirectory来获取所有的子目录,但是EXLCUDE任何以句点“.”开头的目录,这样我就可以排除“.svn”和“.git”之类的内容。不用说,我找遍了整个地方,找不到答案

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

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

完成了任务。当然,我可以使用QoQ,但对我来说,添加所有开销来过滤以一个周期开始的目录似乎很愚蠢


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

你可以创建一个自定义标记,运行cfdirectory,然后在结果上循环(就像你所做的那样)在中使用结果构建新查询或结构。这将使在其他情况下更加可重用。

这可能是cfdirectory内部使用的。但我同意QoQ是更简单的选择。这是我担心的问题。我希望不必使用各种cfif或QoQ语句来获得我想要的。也许Adobe会在CF9中给我们一个惊喜。我想知道Railo或OpenBD是否有更好的cfdirectory标记过滤器?是的,添加所有这些额外的逻辑很糟糕,但是如果你将它们打包成一个udf,并从模板中调用它,监狱强奸的感觉就会消失,这也是我为什么更喜欢使用QofQ的原因之一。您可以将代码包装在一个UDF中,该UDF可以从CFDirectory返回您真正想要的内容。@Jayson,您可以询问Railo和筛选器:Railo允许您使用一个函数作为筛选器。它被传递到文件路径,如果文件应该包含在结果中,则返回true;如果文件应该被排除,则返回false。这也是一个好主意。一个以过滤器为参数并执行cfdirectory+QoQ的函数。为什么您如此反对使用QoQ?这是一个非常强大的工具。我并不反对它,我只是想知道是否有一些未记录的过滤器好东西可以用来在一个语句中完成工作,而不是编写QoQ或cfif语句。
<cfloop query="mydir">
  <cfif left(name, 1) neq ".">
    <!--- do some code --->
  </cfif>
</cfloop>