CFDIRECTORY  
説明

ディレクトリに関する操作を管理します。

 
カテゴリ

ファイル管理タグ

 
シンタックス
<cfdirectory
   action = "directory action"
   directory = "directory name"
   name = "query name"
   filter = "list filter"
   mode = "permission"
   sort = "sort specification"
   newDirectory = "new directory name"
   recurse = "yes"、"no">
 
関連項目

cffile

 
ヒストリ

ColdFusion MX 7: recurse 属性 (Alpha 1 では recursive) と directory 結果セット列が追加されました。

ColdFusion MX:

  • action = "list" の動作が変更されました。
    • Windows の場合、cfdirectory タグで action = "list" を指定したときに、現在のディレクトリとその親ディレクトリを表す "." (ドット) または ".." (二重ドット) のディレクトリエントリは返されなくなりました。
    • Windows の場合、cfdirectory タグで action = "list" を指定したときに、Archive 属性と System 属性の値が返されなくなりました。
    • UNIX および Linux の場合、cfdirectory タグで action = "list" を指定したときに、mode 列の情報は返されなくなりました。

 
使用方法

複数のカスタマが使用するサーバーに ColdFusion アプリケーションを置く場合、未認可のユーザーがアップロードできる、またはこのタグで操作できるファイルおよびディレクトリについて、セキュリティを考慮する必要があります。ColdFusion タグを保護する方法については、『ColdFusion MX の設定と管理』を参照してください。

action = "list" の場合、cfdirectory によって次の結果列が返されます。これらの結果列は cfoutput タグ内で参照できます。

  • name: ディレクトリエントリ名です。"." と ".." のエントリは返されません。
  • directory: エントリを含むディレクトリです。
  • size: ディレクトリエントリのサイズです。
  • type: ファイルタイプです。ファイルの場合は File、ディレクトリの場合は Dir です。
  • dateLastModified: エントリの最終修正日です。
  • attributes: ファイル属性です。適用できる場合に限ります。
  • mode: 空の列です。UNIX の ColdFusion 5 アプリケーションとの下位互換性を保つために残されています。

次の結果列は、標準 CFML 式で使用することができます。結果列名の先頭には、クエリー名が付けられます。

#mydirectory.name#
#mydirectory.directory#
#mydirectory.size#
#mydirectory.type#
#mydirectory.dateLastModified#
#mydirectory.attributes#
#mydirectory.mode#
メモ: cfdirectory タグが機能していないように見える場合 (たとえば list オペレーションで空の結果セットが返される場合) は、そのディレクトリにアクセスする正しい権限を持っているかどうかを確認してください。たとえば、ColdFusion を Windows 上のサービスとして実行している場合、ColdFusion はデフォルトで System として機能し、リモートシステムやマップされたドライブ上のディレクトリにはアクセスできません。この問題を解決するには、ローカルシステムアカウントでは ColdFusion を実行しないでください。

filter 属性には、1 つまたは複数の文字のパターンを指定します。このパターンに一致する名前はすべて結果リストに含まれます。Windows システムではパターンマッチングの際に大文字と小文字は無視され、UNIX および Linux では大文字と小文字は区別されます。

次の 2 つの文字はパターン内で特別な意味を持ち、メタ文字と呼ばれます。

  • * 0 個以上の任意の文字に一致させます。
  • ? 任意の 1 文字に一致させます。

次の表に、パターンとそれに一致するファイル名の例を示します。

パターン 一致するファイル

foo.*

任意の拡張子を持つ、foo という名前のファイル (例 : foo.html、foo.cfm、foo.xml)

*.html

.html という拡張子を持つすべてのファイル (.htm という拡張子のファイルは含まれない)

??

2 文字の名前を持つすべてのファイル

 
<!--- 例 1: ディレクトリの作成と名前変更
ColdFusion のエラーメッセージが生成されないようにするために、ディレクトリが存在することを確認します。 ---
>
<cfset newDirectory = "otherNewDir">
<cfset currentDirectory = GetDirectoryFromPath(GetTemplatePath()) & "newDir">
<!--- ディレクトリが存在するかどうかを確認します。 --->
<cfif DirectoryExists(currentDirectory)>
<!--- TRUE の場合、ディレクトリの名前を変更します。 ---> 
   <cfdirectory action = "rename" directory = "#currentDirectory#" newDirectory = 
"#newDirectory#" >
   <cfoutput>
   <p>ディレクトリが存在し、その名前は次のように変更されました : #newDirectory#</p>
   </cfoutput>
<cfelse>
   <!--- FALSE の場合、ディレクトリを作成します。 --->
   <cfdirectory action = "create" directory = "#currentDirectory#" >
   <cfoutput><p>ディレクトリが作成されました。</p></cfoutput>
</cfif>

<!--- 例 2: ディレクトリの削除
Coldfusion のエラーメッセージが生成されないようにするために、
ディレクトリが存在すること、およびそのディレクトリ内にファイルがないことを確認します。 --->

<cfset currentDirectory = GetDirectoryFromPath(GetTemplatePath()) & "otherNewDir">
<!--- ディレクトリが存在するかどうかを確認します。 --->
<cfif DirectoryExists(currentDirectory)>
   <!--- TRUE の場合、ディレクトリ内にファイルがあるかどうかを削除前に確認します。 --->
   <cfdirectory action="list" directory="#currentDirectory#" 
   name="myDirectory">
   <cfif myDirectory.recordcount gt 0>
   <!--- TRUE の場合、ディレクトリからファイルを削除します。 --->
      <cfoutput>
      <p>ファイルはこのディレクトリに存在します。ファイルを削除するか、削除するためのコードを
         実行します。</P>
      </cfoutput> 
   <cfelse>
   <!--- ディレクトリが空の場合 - ディレクトリを削除します。 --->
      <cfdirectory action = "delete" directory = "#currentDirectory#">
      <cfoutput>
      <p>ディレクトリが存在しますが、削除されました。</P>
      </cfoutput>
   </cfif> 
<cfelse>
   <!--- FALSE の場合、メッセージを送信するか、他の関数を実行します。 --->
   <cfoutput><p>ディレクトリは存在しませんでした。</p></cfoutput>
</cfif> 
<!--- 例 3: ディレクトリの一覧表示
次の例では、ディレクトリ名の配列、およびディレクトリのみに関するエントリを含む
クエリーを作成します。 --->

<cfdirectory directory="C:/temp" name="dirQuery" action="LIST">

<!--- ディレクトリ名の配列を取得します。 --->
<cfset dirsArray=arraynew(1)>
<cfset i=1>
<cfloop query="dirQuery">
<cfif dirQuery.type IS "dir">
   <cfset dirsArray[i]=dirQuery.name>
   <cfset i = i + 1>
</cfif>
</cfloop>
<cfdump var="#dirsArray#">
<br>
<!--- クエリーオブクエリー内のディレクトリ情報をすべて取得します。--->
<cfquery dbtype="query" name="dirsOnly">
SELECT * FROM dirQuery
WHERE TYPE='Dir'
</cfquery>
<cfdump var="#dirsOnly#">
ACTION  
  オプション
 
Default value: "List"
  • list: 指定されたディレクトリにあるファイルのクエリーレコードセットを返します。現在のディレクトリと親ディレクトリを表す "." (ドット) と ".." (二重ドット) のディレクトリエントリは返されません。
  • create
  • delete
  • rename
DIRECTORY  
  必須
 

アクションを実行する対象ディレクトリの絶対パス名です。

次の例のように IP アドレスを使用できます。

<cfdirectory directory="//12.3.123.123/c_drive/" 
name="dirQuery" action="LIST">
NAME  
  action = "list" の場合は必須
 

出力レコードセットの名前です。

FILTER  
  action = "list" の場合はオプション
 

返される名前に適用するファイル拡張子のフィルタです。たとえば、*.cfm などです。適用できるフィルタは 1 つだけです。

MODE  
  オプション
 

action = "create" と共に使用し、許可を表します。UNIX および Linux だけに適用されます。chmod コマンドの 8 進数値を使用し、所有者、グループ、および他の利用者それぞれに割り当てられます。例 :

  • 644: 所有者に読み取り/書き込み許可、グループおよび他の利用者に読み取り許可を割り当てます。
  • 777: 利用者全員に読み取り/書き込み/実行許可を割り当てます。
SORT  
  オプション (action = "list" の場合に使用)
 
Default value: "ASC"

ディレクトリリストのソートに使用するクエリー列です。クエリー出力に含まれる列をカンマ区切りのリストで指定します。

列に条件を付ける場合は、次の値を使用します。

  • asc: 昇順 (a ~ z) のソートです。
  • desc: 降順 (z ~ a) のソートです。

例 :

sort = "directory ASC, size DESC, datelastmodified"

NEWDIRECTORY  
  action = "rename" の場合は必須
 

ディレクトリの新規名です。

RECURSE  
  オプション
 
Default value: "no"

ColdFusion でサブディレクトリ上のアクションを実行するかどうかを指定します。

  • yes
  • no

action="list" および action="delete" の場合に有効です。