我以前<cfdirectory>
只获取目录,但我需要在用 cfscript 编写的 UDF 中执行此操作,因此我需要使用 DirectoryList()。看来我需要获取所有内容,然后手动访问结果过滤目录。但是,有一个过滤器参数......它可以用来只过滤目录吗?如果是这样,过滤器是什么?
我还没有找到只返回目录的示例,并且文档不清楚可以过滤的内容(*.txt 除外)。
我以前<cfdirectory>
只获取目录,但我需要在用 cfscript 编写的 UDF 中执行此操作,因此我需要使用 DirectoryList()。看来我需要获取所有内容,然后手动访问结果过滤目录。但是,有一个过滤器参数......它可以用来只过滤目录吗?如果是这样,过滤器是什么?
我还没有找到只返回目录的示例,并且文档不清楚可以过滤的内容(*.txt 除外)。
<cfdirectory action="list"...>
(and DirectoryList(path [,recurse] [,listInfo="query"]...)
) 返回一个查询对象。您没有理由不能这样做,然后立即对 TYPE 列进行查询过滤。
Mark Kruger 提醒我,我可能应该包含代码:
<cffunction name="DirectoryList2" returntype="query">
<cfargument name="dirPath" type="string" required="true">
<cfif directoryExists(arguments.dirPath)>
<cfdirectory directory="#arguments.dirPath" name="local.DirQuery" action="LIST">
<cfquery name="local.DirQuery" dbtype="query">
SELECT * FROM local.DirQuery WHERE TYPE = 'dir'
</cfquery>
<cfreturn local.DirQuery>
<cfelse>
<cfthrow message="No such directory">
</cfif>
</cffunction>
很不幸的是,不行。与 cfdirectory 的type
属性不同,过滤器仅适用于文件/目录名称。所以我认为不可能只使用filter
查找目录。请记住,您始终可以将 cfdirectory 包装在一个函数中,然后从您的 UDF 中调用它。这就是cflib.org 上旧的DirectoryList函数所做的。
文档不清楚可以过滤的内容(*.txt 除外)。
您只能搜索名称。filter
支持部分模式(如查找包含“xxx”的文件),按文件扩展名搜索,或者您可以使用多个模式应用"|"
:
*test* // partial pattern. names containing the word "test"
*.xls // find Excel files
*test*|*.xls // find names containing "test" OR Excel files
但是,由于该模式仅适用于名称,因此不能用于可靠地识别目录。
Leigh 的答案是正确的(像往常一样 :) 但我想我会把这段代码作为一个非常简单的解决方法。
<cfdirectory directory="c:\blah" name="myDirQuery" action="LIST"/>
<Cfquery name="myDirQuery" dbtype="query">
SELECT * FROM myDirQuery where type = 'dir'
</cfquery>
你可以很容易地将它包装在你自己的函数中。尽管有过滤的限制,这可以让你得到你想要的。
我过去用过这个。
var = dirList(directory_path, false, "query")
// var is now a query record
dirArray = []; // create an array
for(i = 1;i LTE var.recordcount; i++){
if(var.type[i] IS "dir") dirArray.append(var.name[i]);
}
从 CF11 开始,现在可以按名称过滤目录。该版本增强了DirectoryList()以添加对“类型”属性的支持。例如,要搜索包含“docs”的目录名称:
CF2018+(使用命名参数)
result = DirectoryList(path="c:\path",filter="*docs*", type="dir");
CF2016 及更早版本
result = DirectoryList("c:\path", false, "query", "*docs*", "asc", "dir" );