代码之家  ›  专栏  ›  技术社区  ›  Jayson

是否可以用cfdirectory排除文件?

  •  5
  • Jayson  · 技术社区  · 15 年前

    在使用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">
    
    5 回复  |  直到 15 年前
        1
  •  6
  •   rip747    15 年前

    如果您试图进行排除,那么filter属性是无用的。举个例子:就在昨天,我想用cfdirectory来获取所有的子目录,但是 课外活动 任何以句点“.”开头的目录,以便排除“.svn”和“.git”等内容。不用说,我到处找了找,找不到答案。

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

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

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

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

        2
  •  6
  •   Patrick McElhaney    15 年前

    不,不可能排除 cfdirectory 独自一人。filter属性只指定要包含哪些文件,带有DOS样式的通配符( * ? )

    最简单的解决方案可能是用cfquery过滤事实。

    <cfquery name="qryFiles" dbtype="query">
        SELECT * FROM qryFiles
        WHERE name not like '%.cfm'
    </cfquery>
    
        3
  •  2
  •   Ian    15 年前

    您可以创建一个运行cf目录的自定义标记,然后循环遍历结果(就像您所做的那样),用结果构建一个新的查询或结构。这将使它在其他情况下更加可用。

        4
  •  1
  •   Nick Van Brunt    15 年前

    可以在Java对象中这样做。

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

    ..和A filename filter

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

        5
  •  0
  •   Jason    15 年前

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

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

    推荐文章