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

  • 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" の場合に使用)

ASC

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

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

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

例 :

sort = "directory ASC, size DESC, datelastmodified"

newDirectory

action = "rename" の場合は必須

 

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

recurse

オプション

no

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

  • yes
  • no

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

使用方法

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

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

次の結果列は、標準 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 つの文字はパターン内で特別な意味を持ち、メタ文字と呼ばれます。

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

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

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#">

ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告

バージョン7