3

以前は<cfdirectory>ディレクトリのみを取得していましたが、これは cfscript で記述された UDF 内で行う必要があるため、DirectoryList() を使用する必要があります。すべてを取得してから、結果フィルタリング ディレクトリに手動でアクセスする必要があるようです。ただし、フィルターパラメーターがあります...ディレクトリのみをフィルターするために使用できますか? もしそうなら、フィルターは何でしょうか?

ディレクトリのみを返す例は見つかりませんでした。ドキュメントでは、フィルタリングできるものについて明確ではありません (*.txt を除く)。

4

5 に答える 5

5

<cfdirectory action="list"...>(および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>
于 2012-04-22T15:35:35.787 に答える
3

残念だけど違う。cfdirectory の属性とは異なり、フィルターはファイル/ディレクトリtypeにのみ適用されます。したがって、ディレクトリのみを検索するために使用することはできないと思います。いつでも cfdirectory を関数にラップして、UDF から呼び出すことができることに注意してください。これは、cflib.orgの古いDirectoryList関数が行うことです。filter

ドキュメントは、フィルタリングできるものについて明確ではありません (*.txt を除く)。

名前しか検索できません。filter部分的なパターン ("xxx" を含むファイルの検索など)、ファイル拡張子による検索をサポートするか、以下を使用して複数のパターンを適用できます"|"

*test*        // partial pattern. names containing the word "test"
*.xls         // find Excel files
*test*|*.xls  // find names containing "test" OR Excel files

ただし、パターンは名前にのみ適用されるため、ディレクトリを確実に識別するために使用することはできません。

于 2012-04-22T02:30:41.397 に答える
1

リーの答えは正しいものです(いつものように:)が、私はこのコードを非常に簡単な回避策として投入すると思いました。

<cfdirectory directory="c:\blah" name="myDirQuery" action="LIST"/>

<Cfquery name="myDirQuery" dbtype="query">
  SELECT * FROM myDirQuery where type = 'dir'
</cfquery>

あなたはそれをあなた自身の関数でかなり簡単に包むことができます。これにより、フィルタリングの制限にもかかわらず、必要なものが得られます。

于 2012-04-23T14:23:11.937 に答える
1

私は過去にこれを使用しました。

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]);
}
于 2015-02-03T19:10:14.727 に答える