ディレクトリに関する操作を管理します。
<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">
ColdFusion MX 7: recurse 属性 (Alpha 1 では recursive) と directory 結果セット列が追加されました。
ColdFusion MX:
action = "list" の動作が変更されました。
cfdirectory タグで action = "list" を指定したときに、現在のディレクトリとその親ディレクトリを表す "." (ドット) または ".." (二重ドット) のディレクトリエントリは返されなくなりました。cfdirectory タグで action = "list" を指定したときに、Archive 属性と System 属性の値が返されなくなりました。cfdirectory タグで action = "list" を指定したときに、mode 列の情報は返されなくなりました。| 属性 |
必須/ オプション |
デフォルト | 説明 |
|---|---|---|---|
|
action |
オプション |
List |
|
|
directory |
必須 |
|
アクションを実行する対象ディレクトリの絶対パス名です。 次の例のように IP アドレスを使用できます。 <cfdirectory directory="//12.3.123.123/c_drive/" name="dirQuery" action="LIST"> |
|
name |
|
|
出力レコードセットの名前です。 |
|
filter |
|
|
返される名前に適用するファイル拡張子のフィルタです。たとえば、*.cfm などです。適用できるフィルタは 1 つだけです。 |
|
mode |
オプション |
|
|
|
sort |
オプション ( |
ASC |
ディレクトリリストのソートに使用するクエリー列です。クエリー出力に含まれる列をカンマ区切りのリストで指定します。 列に条件を付ける場合は、次の値を使用します。
例 :
|
|
newDirectory |
|
|
ディレクトリの新規名です。 |
|
recurse |
オプション |
no |
ColdFusion でサブディレクトリ上のアクションを実行するかどうかを指定します。
|
複数のカスタマが使用するサーバーに 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 つの文字はパターン内で特別な意味を持ち、メタ文字と呼ばれます。
次の表に、パターンとそれに一致するファイル名の例を示します。
| パターン | 一致するファイル |
|---|---|
|
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