- CFML Reference User Guide
- ColdFusion functions
- ColdFusion functions by category
- Functions a-b
- Abs
- ACos
- AddSOAPRequestHeader
- AddSOAPResponseHeader
- AjaxLink
- AjaxOnLoad
- ApplicationStop
- ArrayAppend
- ArrayAvg
- ArrayClear
- ArrayContains
- ArrayContainsNoCase
- ArrayDelete
- ArrayDeleteAt
- ArrayDeleteNoCase
- ArrayEach
- ArrayFilter
- ArrayFind
- ArrayFindAll
- ArrayFindAllNoCase
- ArrayFindNoCase
- ArrayInsertAt
- ArrayIsDefined
- ArrayIsEmpty
- ArrayLen
- ArrayMap
- ArrayMax
- ArrayMin
- ArrayNew
- ArrayPrepend
- ArrayReduce
- ArrayResize
- ArraySet
- ArraySetMetadata
- ArraySlice
- ArraySort
- ArraySum
- ArraySwap
- ArrayToList
- Asc
- ASin
- Atn
- AuthenticatedContext
- AuthenticatedUser
- BinaryDecode
- BinaryEncode
- BitAnd
- BitMaskClear
- BitMaskRead
- BitMaskSet
- BitNot
- BitOr
- BitSHLN
- BitSHRN
- BitXor
- BooleanFormat
- Abs
- Functions-c-d
- CacheGet
- CacheGetAllIds
- CacheGetMetadata
- CacheGetProperties
- CacheGetSession
- CacheIdExists
- CachePut
- CacheRegionExists
- CacheRegionNew
- CacheRegionRemove
- CacheRemove
- CacheRemoveAll
- CacheSetProperties
- CallStackDump
- CallStackGet
- CanDeSerialize
- Canonicalize
- CanSerialize
- Ceiling
- CharsetDecode
- CharsetEncode
- Chr
- CJustify
- Compare
- CompareNoCase
- Cos
- CreateDate
- CreateDateTime
- CreateObject
- CreateObject: .NET object
- CreateObject: COM object
- CreateObject: component object
- CreateObject: CORBA object
- CreateObject: Java or EJB object
- CreateObject: web service object
- CreateODBCDate
- CreateODBCDateTime
- CreateODBCTime
- CreateSignedJWT
- CreateEncryptedJWT
- CreateTime
- CreateTimeSpan
- CreateUUID
- CSRFGenerateToken
- CSRFVerifyToken
- CSVRead
- CSVWrite
- CSVProcess
- DateAdd
- DateCompare
- DateConvert
- DateDiff
- DateFormat
- DatePart
- DateTimeFormat
- Day
- DayOfWeek
- DayOfWeekAsString
- DayOfYear
- DaysInMonth
- DaysInYear
- DE
- DecimalFormat
- DecodeForHTML
- DecodeFromURL
- DecrementValue
- Decrypt
- DecryptBinary
- DeleteClientVariable
- Deserialize
- DeserializeJSON
- DeserializeXML
- DirectoryCopy
- DirectoryCreate
- DirectoryDelete
- DirectoryExists
- DirectoryList
- DirectoryRename
- DollarFormat
- DotNetToCFType
- Duplicate
- Functions-e-g
- EncodeForCSS
- EncodeForDN
- EncodeForHTML
- EncodeForHTMLAttribute
- EncodeForJavaScript
- EncodeForLDAP
- EncodeForURL
- EncodeForXML
- EncodeForXMLAttribute
- EncodeForXpath
- Encrypt
- EncryptBinary
- EntityDelete
- EntityLoad
- EntityLoadByExample
- EntityLoadByPK
- EntityMerge
- EntityNew
- EntityReload
- EntitySave
- EntityToQuery
- Evaluate
- Exp
- ExpandPath
- FileClose
- FileCopy
- FileDelete
- FileExists
- FileGetMimeType
- FileIsEOF
- FileMove
- FileOpen
- FileRead
- FileReadBinary
- FileReadLine
- FileSeek
- FileSetAccessMode
- FileSetAttribute
- FileSetLastModified
- FileSkipBytes
- FileUpload
- FileUploadAll
- FileWrite
- FileWriteLine
- Find
- FindNoCase
- FindOneOf
- FirstDayOfMonth
- Fix
- Floor
- FormatBaseN
- GeneratePBKDFKey
- GenerateSecretKey
- GetApplicationMetadata
- GetAuthUser
- GetBaseTagData
- GetBaseTagList
- GetBaseTemplatePath
- GetClientVariablesList
- GetComponentMetaData
- GetContextRoot
- GetCPUUsage
- GetCurrentTemplatePath
- GetCSPNonce
- GetDirectoryFromPath
- GetEncoding
- GetException
- GetFileFromPath
- GetFileInfo
- GetFreeSpace
- GetFunctionCalledName
- GetFunctionList
- GetGatewayHelper
- GetHttpRequestData
- GetHttpTimeString
- GetK2ServerDocCount
- GetK2ServerDocCountLimit
- GetLocale
- GetLocaleDisplayName
- GetLocalHostIP
- GetMetaData
- GetMetricData
- GetPageContext
- GetPropertyString
- GetPropertyFile
- GetPrinterInfo
- GetPrinterList
- GetProfileSections
- GetProfileString
- GetReadableImageFormats
- GetSafeHTML
- GetSAMLAuthRequest
- GetSAMLLogoutRequest
- Generate3DesKey
- GenerateSAMLSPMetadata
- GetSOAPRequest
- GetSOAPRequestHeader
- GetSOAPResponse
- GetSOAPResponseHeader
- GetSystemFreeMemory
- GetSystemTotalMemory
- GetTempDirectory
- GetTempFile
- GetTemplatePath
- GetTickCount
- GetTimeZoneInfo
- GetToken
- GetTotalSpace
- GetUserRoles
- GetVFSMetaData
- GetWriteableImageFormats
- Functions-h-im
- Hash
- HMac
- Hour
- HQLMethods
- HTMLCodeFormat
- HTMLEditFormat
- IIf
- ImageAddBorder
- ImageBlur
- ImageClearRect
- ImageCopy
- ImageCreateCaptcha
- ImageCrop
- ImageDrawArc
- ImageDrawBeveledRect
- ImageDrawCubicCurve
- ImageDrawLine
- ImageDrawLines
- ImageDrawOval
- ImageDrawPoint
- ImageDrawQuadraticCurve
- ImageDrawRect
- ImageDrawRoundRect
- ImageDrawText
- ImageFlip
- ImageGetBlob
- ImageGetBufferedImage
- ImageGetEXIFMetadata
- ImageGetEXIFTag
- ImageGetHeight
- ImageGetIPTCMetadata
- ImageGetIPTCTag
- ImageGetMetadata
- ImageGetWidth
- ImageGrayscale
- ImageInfo
- ImageMakeColorTransparent
- ImageMakeTranslucent
- ImageNegative
- ImageNew
- ImageOverlay
- ImagePaste
- ImageRead
- ImageReadBase64
- ImageResize
- ImageRotate
- ImageRotateDrawingAxis
- ImageScaleToFit
- ImageSetAntialiasing
- ImageSetBackgroundColor
- ImageSetDrawingColor
- ImageSetDrawingStroke
- ImageSetDrawingTransparency
- ImageSharpen
- ImageShear
- ImageShearDrawingAxis
- ImageTranslate
- ImageTranslateDrawingAxis
- ImageWrite
- ImageWriteBase64
- ImageXORDrawingMode
- Functions-in-k
- IncrementValue
- InputBaseN
- Insert
- Int
- InterruptThread
- InvalidateOauthAccesstoken
- Invoke
- InitSAMLAuthRequest
- InitSAMLLogoutRequest
- InvokeCFClientFunction
- IsArray
- IsAuthenticated
- IsAuthorized
- IsBinary
- IsBoolean
- IsClosure
- IsCustomFunction
- IsDate
- IsDateObject
- IsDDX
- IsDebugMode
- IsDefined
- IsImage
- IsImageFile
- IsInstanceOf
- IsIPv6
- IsJSON
- IsK2ServerABroker
- IsK2ServerDocCountExceeded
- IsK2ServerOnline
- IsLeapYear
- IsLocalHost
- IsNull
- IsNumeric
- IsNumericDate
- IsObject
- isOnline
- IsPDFArchive
- IsPDFFile
- IsPDFObject
- IsProtected
- IsQuery
- isSamlLogoutResponse
- isSafeHTML
- IsSimpleValue
- IsSOAPRequest
- IsSpreadsheetFile
- IsSpreadsheetObject
- IsStruct
- isThreadInterrupted
- IsUserInAnyRole
- IsUserInRole
- IsUserLoggedIn
- IsValid
- IsValidOauthAccesstoken
- IsWDDX
- IsXML
- IsXmlAttribute
- IsXmlDoc
- IsXmlElem
- IsXmlNode
- IsXmlRoot
- JavaCast
- JSStringFormat
- Functions-l
- LCase
- Left
- Len
- ListAppend
- ListChangeDelims
- ListContains
- ListContainsNoCase
- ListDeleteAt
- ListEach
- ListFilter
- ListFind
- ListFindNoCase
- ListFirst
- ListGetAt
- ListGetDuplicates
- ListInsertAt
- ListLast
- ListLen
- ListMap
- ListPrepend
- ListQualify
- ListReduce
- ListRemoveDuplicates
- ListRest
- ListSetAt
- ListSort
- ListToArray
- ListValueCount
- ListValueCountNoCase
- LJustify
- Location
- Log
- Log10
- LSCurrencyFormat
- LSDateFormat
- LSDateTimeFormat
- LSEuroCurrencyFormat
- LSIsCurrency
- LSIsDate
- LSIsNumeric
- LSNumberFormat
- LSParseCurrency
- LSParseDateTime
- LSParseEuroCurrency
- LSParseNumber
- LSTimeFormat
- LTrim
- Functions-m-r
- Max
- Mid
- Min
- Minute
- Month
- MonthAsString
- Now
- NumberFormat
- ObjectEquals
- ObjectLoad
- ObjectSave
- OnWSAuthenticate
- ORMClearSession
- ORMCloseAllSessions
- ORMCloseSession
- ORMEvictCollection
- ORMEvictEntity
- ORMEvictQueries
- ORMExecuteQuery
- ORMFlush
- ORMFlushall
- ORMGetSession
- ORMGetSessionFactory
- ORMIndex
- ORMIndexPurge
- ORMReload
- ORMSearch
- ORMSearchOffline
- ParagraphFormat
- ParameterExists
- ParseDateTime
- Pi
- PrecisionEvaluate
- ProcessSAMLResponse
- ProcessSAMLLogoutRequest
- Quarter
- PreserveSingleQuotes
- QueryAddColumn
- QueryAddRow
- QueryConvertForGrid
- QueryExecute
- QueryFilter
- QueryGetResult
- QueryGetRow
- QueryKeyExists
- QueryMap
- QueryNew
- QueryReduce
- QuerySetCell
- QuotedValueList
- QueryEach
- Rand
- Randomize
- RandRange
- ReEscape
- REFind
- REFindNoCase
- ReleaseComObject
- REMatch
- REMatchNoCase
- RemoveCachedQuery
- RemoveChars
- RepeatString
- Replace
- ReplaceList
- ReplaceNoCase
- REReplace
- REReplaceNoCase
- RestDeleteApplication
- RestSetResponse
- RestInitApplication
- Reverse
- Right
- RJustify
- Round
- RTrim
- Functions-s
- Second
- SendGatewayMessage
- SendSAMLLogoutResponse
- Serialize
- SerializeJSON
- SerializeXML
- SessionInvalidate
- SessionRotate
- SessionGetMetaData
- SessionInvalidate
- SessionRotate
- SetDay
- SetEncoding
- SetHour
- SetLocale
- SetMonth
- SetProfileString
- SetPropertyString
- SetVariable
- SetYear
- Sgn
- Sin
- Sleep
- SpanExcluding
- SpanIncluding
- SpreadsheetAddAutoFilter
- SpreadsheetAddColumn
- SpreadsheetAddFreezePane
- SpreadsheetAddImage
- SpreadsheetAddInfo
- SpreadsheetAddPageBreaks
- SpreadsheetAddRow
- SpreadsheetAddRows
- SpreadsheetAddSplitPane
- SpreadsheetCreateSheet
- SpreadsheetDeleteColumn
- SpreadsheetDeleteColumns
- SpreadsheetDeleteRow
- SpreadsheetDeleteRows
- SpreadsheetFormatCell
- SpreadsheetFormatColumn
- SpreadsheetFormatCellRange
- SpreadsheetFormatColumn
- SpreadsheetFormatColumns
- SpreadsheetFormatRow
- SpreadsheetFormatRows
- SpreadsheetGetCellComment
- SpreadsheetGetCellFormula
- SpreadsheetGetCellValue
- SpreadsheetGetColumnCount
- SpreadsheetInfo
- SpreadsheetMergeCells
- SpreadsheetNew
- SpreadsheetRead
- SpreadsheetReadBinary
- SpreadsheetRemoveSheet
- SpreadsheetSetActiveSheet
- SpreadsheetSetActiveSheetNumber
- SpreadsheetSetCellComment
- SpreadsheetSetCellFormula
- SpreadsheetSetCellValue
- SpreadsheetSetColumnWidth
- SpreadsheetSetFooter
- SpreadsheetSetHeader
- SpreadsheetSetRowHeight
- SpreadsheetShiftColumns
- SpreadsheetShiftRows
- SpreadsheetWrite
- StreamingSpreadsheetNew
- StreamingSpreadsheetCleanup
- StreamingSpreadsheetRead
- StreamingSpreadsheetProcess
- SpreadsheetSetFooterImage
- SpreadsheetSetHeaderImage
- SpreadsheetSetFittoPage
- SpreadsheetUngroupColumns
- SpreadsheetGroupColumns
- SpreadsheetUngroupRows
- SpreadsheetGroupRows
- SpreadsheetRemoveColumnBreak
- SpreadsheetSetColumnBreak
- SpreadsheetRemoveRowBreak
- SpreadsheetSetRowBreak
- SpreadsheetRemovePrintGridlines
- SpreadsheetAddPrintGridlines
- SpreadsheetGetColumnWidth
- SpreadsheetSetColumnHidden
- SpreadsheetSetRowHidden
- SpreadsheetisColumnHidden
- SpreadsheetisRowHidden
- SpreadsheetisStreamingXmlFormat
- SpreadsheetisXmlFormat
- SpreadsheetisBinaryFormat
- SpreadsheetRenameSheet
- SpreadsheetRemoveSheetNumber
- SpreadsheetGetLastRowNumber
- SpreadsheetGetPrintOrientation
- Sqr
- StripCR
- StructAppend
- StructClear
- StructCopy
- StructCount
- StructDelete
- StructEach
- StructFilter
- StructFind
- StructFindKey
- StructFindValue
- StructGet
- StructGetMetadata
- StructInsert
- StructIsEmpty
- StructKeyArray
- StructKeyExists
- StructKeyList
- StructMap
- StructNew
- StructReduce
- StructSetMetadata
- StructSort
- StructToSorted
- StructUpdate
- StructValueArray
- StoreSetMetadata
- StoreGetACL
- StoreGetMetadata
- StoreAddACL
- StoreSetACL
- Functions-t-z
- Tan
- ThreadJoin
- ThreadTerminate
- Throw
- TimeFormat
- ToBase64
- ToBinary
- ToScript
- ToString
- Trace
- Transactionandconcurrency
- TransactionCommit
- TransactionRollback
- TransactionSetSavePoint
- Trim
- UCase
- URLDecode
- URLEncodedFormat
- URLSessionFormat
- Val
- ValueList
- VerifyClient
- Week
- Wrap
- WriteDump
- WriteLog
- WriteOutput
- WSGetAllChannels
- WSGetSubscribers
- WSPublish
- WSSendMessage
- XmlChildPos
- XmlElemNew
- XmlFormat
- XmlGetNodeType
- XmlNew
- XmlParse
- XmlSearch
- XmlTransform
- XmlValidate
- Year
- YesNoFormat
- ColdFusion tags
- ColdFusion tag summary
- ColdFusion tags by category
- Application framework tags
- Communications tags
- Database manipulation tags
- Data output tags
- Debugging tags
- Exception handling tags
- Extensibility tags
- File management tags
- Flow-control tags
- Forms tags
- Internet Protocol tags
- Page processing tags
- Security tags
- Variable manipulation tags
- Other tags
- Tags a-b
- Tags c
- cfcache
- cfcalendar
- cfcase
- cfcatch
- cfchart
- cfchart tag in ColdFusion
- Get started with cfchart
- Customize a chart using cfchart
- Advanced cfchart customization options
- Create an area chart in ColdFusion
- Create line charts in ColdFusion
- Create bar charts in ColdFusion
- Create floating bar charts in ColdFusion
- Create histograms in ColdFusion
- Create pie charts in ColdFusion
- Create funnel charts in ColdFusion
- Create pyramid charts in ColdFusion
- Create curve charts in ColdFusion
- Create boxplots in ColdFusion
- Create donut charts in ColdFusion
- Create bubble charts in ColdFusion
- Create scatterplots in ColdFusion
- Create radar charts in ColdFusion
- Other chart types in ColdFusion (Cone, Cylinder, Piano, and Bullet)
- Advanced customization options in cfchart
- cfchartdata
- cfchartseries
- cfchartset
- cfclient
- cfclientsettings
- cfcol
- cfcollection
- cfcomponent
- cfcontent
- cfcontinue
- cfcookie
- Tags f
- cffeed
- cffile
- cffile action = "append"
- cffile action = "copy"
- cffile action = "delete"
- cffile action = "move"
- cffile action = "read"
- cffile action = "readBinary"
- cffile action = "rename"
- cffile action = "upload"
- cffile action = "uploadAll"
- cffile action = "write"
- cffileupload
- cffinally
- cfflush
- cfform
- cfformgroup
- cfformitem
- cfftp
- cfftp: Connection: file and directory operations
- cfftp: Opening and closing FTP server connections
- cfftp : Opening and closing secure FTP server connections
- cfftp action = "listDir"
- cffunction
- Tags g-h
- Tags i
- Tags j-l
- cfjava
- cflayout
- cflayoutarea
- cfldap
- cflocation
- cflock
- cflog
- cflogin
- cfloginuser
- cflogout
- cfloop
- cfloop : conditional loop
- cfloop : index loop
- cfloop : looping over a COM collection or structure
- cfloop : looping over a date or time range
- cfloop : looping over a list, a file, or an array
- cfloop : looping over a query
- Tags m-o
- cfmail
- cfmailparam
- cfmailpart
- cfmap
- cfmapitem
- cfmediaplayer
- cfmenu
- cfmenuitem
- cfmessagebox
- cfmodule
- cfNTauthenticate
- cfoauth
- cfobject
- cfobject: .NET object
- cfobject: COM object
- cfobject: component object
- cfobject: CORBA object
- cfobject: Java or EJB object
- cfobject: web service object
- cfobjectcache
- cfoutput
- Tags p-q
- Tags r-s
- Tags t
- Tags u-z
- CFML Reference
- Reserved words and variables
- Ajax JavaScript functions
- Ajax JavaScript functions
- Function summary Ajax
- ColdFusion.Ajax.submitForm
- ColdFusion.Autosuggest.getAutosuggestObject
- ColdFusion.Layout.enableSourceBind
- ColdFusion.MessageBox.getMessageBoxObject
- ColdFusion.ProgressBar.getProgressBarObject
- ColdFusion.MessageBox.isMessageBoxDefined
- JavaScriptFunctionsinColdFusion9Update1
- ColdFusion ActionScript functions
- ColdFusion mobile functions
- Application.cfc reference
- Script functions implemented as CFCs
- ColdFusion Flash Form style reference
- Styles valid for all controls
- Styles for cfform
- Styles for cfformgroup with horizontal or vertical type attributes
- Styles for box-style cfformgroup elements
- Styles for cfformgroup with accordion type attribute
- Styles for cfformgroup with tabnavigator type attribute
- Styles for cfformitem with hrule or vrule type attributes
- Styles for cfinput with radio, checkbox, button, image, or submit type attributes
- Styles for cftextarea tag and cfinput with text, password, or hidden type attributes
- Styles for cfselect with size attribute value of 1
- Styles for cfselect with size attribute value greater than 1
- Styles for cfcalendar tag and cfinput with dateField type attribute
- Styles for the cfgrid tag
- Styles for the cftree tag
- ColdFusion Flash Form Style Reference
- ColdFusion event gateway reference
- ColdFusion Event Gateway reference
- addEvent
- CFEvent
- CFEventclass
- Constructor
- Gateway development interfaces and classes
- getStatus
- setCFCPath
- setCFCMethod
- getOriginatorID
- getLogger
- getBuddyList
- getBuddyInfo
- IM gateway message sending commands
- IM Gateway GatewayHelper class methods
- onIncomingMessage
- onIMServerMessage
- onBuddyStatus
- onAddBuddyResponse
- onAddBuddyRequest
- IM Gateway CFC incoming message methods
- IM gateway methods and commands
- CFML CFEvent structure
- warn
- info
- setOriginatorID
- data command
- submit Multi command
- submit command
- setGatewayType
- setGatewayID
- setData
- setCFCListeners
- outgoingMessage
- getStatusTimeStamp
- numberOfMessagesReceived
- numberOfMessagesSent
- removeBuddy
- removeDeny
- removePermit
- setNickName
- setPermitMode
- setStatus
- SMS Gateway CFEvent structure and commands
- SMS Gateway incoming message CFEvent structure
- getStatusAsString
- getProtocolName
- getPermitMode
- getPermitList
- getNickName
- getName
- getDenyList
- getCustomAwayMessage
- getQueueSize
- getMaxQueueSize
- getHelper
- getGatewayType
- getGatewayServices
- getGatewayID_1
- getGatewayID
- getData
- getCFCTimeout
- setCFCTimeout
- getCFCPath
- getCFCMethod
- GatewayServices class
- Gateway interface
- GatewayHelper interface
- addPermit
- addDeny
- addBuddy
- error
- debug
- Logger class
- stop
- start
- CFML event gateway SendGatewayMessage data parameter
- restart
- fatal
- SMS gateway message sending commands
- ColdFusion C++ CFX Reference
- ColdFusion Java CFX reference
- WDDX JavaScript Objects
- Cloud services
- ColdFusion and GCP Storage
- ColdFusion and GCP Firestore
- ColdFusion and GCP PubSub
- ColdFusion and Amazon S3
- ColdFusion and DynamoDB
- ColdFusion and Amazon SQS
- ColdFusion and Amazon SNS
- ColdFusion and MongoDB
- ColdFusion and Azure Blob
- ColdFusion and Azure Service Bus
- Multi-cloud storage services
- Multi-cloud RDS databases
- ColdFusion and Azure Cosmos DB
<cfdirectory directory = "directory name" action = "list|copy|create|delete|rename" destination = "full pathname" filter = "list filter" listInfo = "name|all" mode = "permission" name = "query name" newDirectory = "new directory name" recurse = "yes|no" sort = "sort specification" storeACL = "S3_premissions" storeLocation = "location" type = "file|dir|all">
cfscript equivalent of the syntax
<cfscript>
cfdirectory(directory = "directory name", action = "list|copy|create|delete|rename", destination = "full pathname", filter = "list filter", listInfo = "name|all", mode = "permission", name = "query name", newDirectory = "new directory name", recurse = "yes|no", sort = "sort specification", storeACL = "S3_premissions", storeLocation = "location", type = "file|dir|all")
</cfscript>
Note: You can specify this tag's attributes in an attributeCollection attribute whose value is a structure. Specify the structure name in the attributeCollection attribute and use the tag's attribute names as structure keys. |
See also
History
ColdFusion 10: Added the action copy and the attribute destination.
ColdFusion 9.0.1: Added the storeACL and storeLocation attributes.
ColdFusion 8: Added the listinfo and type attributes.
ColdFusion MX 7: Added the recurse attribute and directory result set column.
ColdFusion MX:
- Changed behavior for action = "list":
- On Windows, cfdirectory action = "list" no longer returns the directory entries "." (dot) or ".." (dot dot), which represent "the current directory" and "the parent directory."
- On Windows, cfdirectory action = "list" no longer returns the values of the Archive and System attributes.
- On UNIX and Linux, cfdirectory action = "list" does not return any information in the mode column.
Attributes
Attribute |
Req/Opt |
Default |
Description |
|
|---|---|---|---|---|
directory |
Required |
|
Absolute pathname of directory against which to perform action. You can use an IP address, as in the following example:
|
|
action |
Optional |
list |
|
|
destination |
Required if action = "copy" |
|
Path of the destination directory. If not an absolute path, it is relative to the source directory. |
|
filter |
Optional if action = "list" |
|
File extension filter applied to returned names, for example, *.cfm. You can also use a pipe ("|") delimiter to specify multiple filters. |
|
listinfo |
Optional |
all |
|
|
mode |
Optional |
|
Used with action = "create". Permissions. Applies only to UNIX and Linux. Octal values of chmod command. Assigned to owner, group, and other, respectively, for example:
|
|
name |
Required if action = "list" |
|
Name for output record set. |
|
newDirectory |
Required if action = "rename" |
|
New name for directory . |
|
recurse |
Optional |
no |
Whether ColdFusion performs the action on subdirectories:
|
|
sort |
Optional; used if action = "list" |
ASC |
Query columns by which to sort a directory listing. Delimited list of columns from query output. To qualify a column, use one of the following values:
|
|
storeACL |
Optional; used if action = "create" |
|
An array of struct where each struct represents a permission or grant. |
|
StoreLocation |
Optional; used if action = "create" |
US |
Used to change the location of the created bucket. The location can either be EU, US, or US-WEST. |
|
type |
Optional |
all |
|
|
storeLocation |
Optional |
|
Used to change the location of the created bucket. The location can either be EU or US. The default location is US . |
|
storeACL |
Optional |
|
An array of struct where each struct represents a permission or grant. |
Usage
If you put ColdFusion applications on a server that is used by multiple customers, you must consider the security of files and directories that could be uploaded or otherwise manipulated with this tag by unauthorized users. For more information about securing ColdFusion tags, see Configuring and Administering ColdFusion.
If action = "list", cfdirectory returns the following result columns, which you can reference in a cfoutput tag:
- name: Directory entry name. The entries "." and ".." are not returned.
- directory: Directory that contains the entry.
- size: Directory entry size.
- type: File type: file, for a file; dir, for a directory.
- dateLastModified: The date that an entry was last modified.
- attributes: File attributes, if applicable.
- link: Specifies if the listed path is a symbolic link or not.
mode: Empty column; retained for backward compatibility with ColdFusion 5 applications on UNIX.
Use the following result columns in standard CFML expressions, preceding the result column name with the query name:#mydirectory.directory#
#mydirectory.size#
#mydirectory.type#
#mydirectory.dateLastModified#
#mydirectory.attributes#
#mydirectory.mode#Note: If the cfdirectory tag does not appear to work, for example, if a list operation returns an empty result set, make sure that you have correct permissions to access the directory. For example, if you run ColdFusion as a service on Windows, it operates by default as System, and cannot access directories on a remote system or mapped drive; to resolve this issue, do not run ColdFusion using the local system account.
The filter attribute specifies a pattern of one or more characters. All names that match that pattern are included in the list. On Windows systems, pattern matching ignores text case, on UNIX and Linux, pattern matches are case-sensitive. The following two characters have special meaning in the pattern and are called metacharacters:
- The asterisk (*) matches any zero or more characters.
- The question mark (?) matches any single character.
- The pipe (|) character is the delimiter.
The following table shows examples of patterns and filenames that they match:
Pattern |
Matches |
|---|---|
foo.* |
Any file called foo with any extension; for example, foo.html, foo.cfm, and foo.xml. |
*.html |
All files with the suffix .html, but not files with the suffix .htm. |
?? |
All files with two-character names. |
Example of action="list"
<!---List all files in a directory--->
<cfdirectory action="list" directory="#expandPath("./")#" recurse="false" name="myList">
<cfdump var="#myList#">
Example of action="create"
<!--- creates a directory in the specified location --->
<cfdirectory action="create" directory="#expandPath("./myNewDir")#">
Example of action="delete"
<!--- deletes a directory in the specified location --->
<cfdirectory action="delete" directory="#expandPath("./myNewDir")#">
Sometimes, an exception displays after cloning a .git directory and trying to delete the directory using the cfdirectory tag.
Set the jvm flag coldfusion.files.disableforcedelete to true in jvm.config to resolve the issue.
Example of action="rename"
<!--- creates and renames a directory in the specified location ---><cfdirectory action="create" directory="#expandPath("./myNewDir")#">
<cfdirectory action="rename" directory="#expandPath("./myNewDir")#" newdirectory="#expandPath("./myRenamedDir")#" >
Example of action="copy"
<!--- Creates and copies a directory from one location to another --->
<cfdirectory action="create" directory="#expandPath("./myNewDir")#">
<cfdirectory action="copy" destination="#expandPath("././")#" directory="#expandPath("./myNewDir")#" >
<!--- EXAMPLE 1: Creating and Renaming Check that the directory exists to avoid getting a ColdFusion error message. ---> <cfset newDirectory = "otherNewDir"> <cfset currentDirectory = GetDirectoryFromPath(GetCurrentTemplatePath()) & "newDir"> <!--- Check whether the directory exists. ---> <cfif DirectoryExists(currentDirectory)> <!--- If yes, rename the directory. ---> <cfdirectory action = "rename" directory = "#currentDirectory#" newDirectory = "#newDirectory#" > <cfoutput> <p>The directory existed and the name has been changed to: #newDirectory#</p> </cfoutput> <cfelse> <!--- If no, create the directory. ---> <cfdirectory action = "create" directory = "#currentDirectory#" > <cfoutput><p>Your directory has been created.</p></cfoutput> </cfif> <!--- EXAMPLE 2: Deleting a directory Check that the directory exists and that files are not in the directory to avoid getting ColdFusion error messages. ---> <cfset currentDirectory = GetDirectoryFromPath(GetCurrentTemplatePath()) & "otherNewDir"> <!--- Check whether the directory exists. ---> <cfif DirectoryExists(currentDirectory)> <!--- If yes, check whether there are files in the directory before deleting. ---> <cfdirectory action="list" directory="#currentDirectory#" name="myDirectory"> <cfif myDirectory.recordcount gt 0> <!--- If yes, delete the files from the directory. ---> <cfoutput> <p>Files exist in this directory. Either delete the files or code something to do so.</P> </cfoutput> <cfelse> <!--- Directory is empty - just delete the directory. ---> <cfdirectory action = "delete" directory = "#currentDirectory#"> <cfoutput> <p>The directory existed and has been deleted.</P> </cfoutput> </cfif> <cfelse> <!--- If no, post message or do some other function. ---> <cfoutput><p>The directory did NOT exist.</p></cfoutput> </cfif> <!---EXAMPLE 3: List directories The following example creates both an array of directory names and a query that contains entries for the directories only. ---> <cfdirectory directory="C:/temp" name="dirQuery" action="LIST"> <!--- Get an array of directory names. ---> <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> <!--- Get all directory information in a query of queries.---> <cfquery dbtype="query" name="dirsOnly"> SELECT * FROM dirQuery WHERE TYPE='Dir' </cfquery> <cfdump var="#dirsOnly#">
Real-world uses of the cfdirectory tag
Log file browser
Your IT operations team needs a web-based tool to browse and view application log files stored in various directories. The system generates daily log files for different modules (authentication, errors, API calls, database queries). Administrators need to quickly list and view these logs without SSH/FTP access.
Problem statement
- Multiple log files are created daily across different directories
- Administrators need quick access to view log file details (name, size, date modified)
- Need to filter logs by date or type
- Must display file information in a readable format
Solution
Use cfdirectory tag with action="list" to get all files and subdirectories, access file size, date modified, type, attributes, and use patterns to filter specific file types.
<h1>Log File Browser Demo</h1>
<p><strong>What This Demo Shows:</strong> How to list files in a directory and display file details.</p>
<hr>
<h2>Example 1: List All Files in Current Directory</h2>
<cftry>
<!--- Get current directory --->
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<!--- List all files in the current directory --->
<cfdirectory
action="list"
directory="#currentDir#"
name="allFiles"
recurse="false">
<p><strong>✓ Directory Listed Successfully</strong></p>
<p>Directory: <cfoutput>#currentDir#</cfoutput></p>
<p>Total Items: <cfoutput>#allFiles.recordCount#</cfoutput></p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;">
<tr style="background-color: ##f0f0f0;">
<th>Name</th>
<th>Type</th>
<th>Size (bytes)</th>
<th>Date Modified</th>
</tr>
<cfloop query="allFiles">
<cfoutput>
<tr>
<td>#allFiles.name#</td>
<td>#allFiles.type#</td>
<td>#allFiles.size#</td>
<td>#dateTimeFormat(allFiles.dateLastModified, "yyyy-mm-dd HH:nn:ss")#</td>
</tr>
</cfoutput>
</cfloop>
</table>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
<cflog file="directory_errors" type="error" text="List error: #cfcatch.message#">
</cfcatch>
</cftry>
<hr>
<h2>Example 2: Filter Specific File Types (CFM Files)</h2>
<cftry>
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<!--- List only .cfm files --->
<cfdirectory
action="list"
directory="#currentDir#"
name="cfmFiles"
filter="*.cfm">
<p><strong>✓ Filtered List Retrieved</strong></p>
<p>Found <cfoutput>#cfmFiles.recordCount#</cfoutput> CFM file(s)</p>
<cfif cfmFiles.recordCount GT 0>
<ul>
<cfloop query="cfmFiles">
<cfoutput>
<li>#cfmFiles.name# - #numberFormat(cfmFiles.size/1024, "0.00")# KB</li>
</cfoutput>
</cfloop>
</ul>
<cfelse>
<p>No CFM files found.</p>
</cfif>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
</cfcatch>
</cftry>
<hr>
<h2>Example 3: Simulated Log File Display</h2>
<cftry>
<!--- Create mock log file data --->
<cfset mockLogs = [
{name: "app-2024-11-07.log", type: "File", size: 45678, dateLastModified: now()},
{name: "error-2024-11-07.log", type: "File", size: 12345, dateLastModified: dateAdd("h", -2, now())},
{name: "api-2024-11-07.log", type: "File", size: 89012, dateLastModified: dateAdd("h", -5, now())},
{name: "db-2024-11-07.log", type: "File", size: 34567, dateLastModified: dateAdd("h", -1, now())}
]>
<p><strong>✓ Log Files (Simulated Data)</strong></p>
<p>Showing recent application logs:</p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;">
<tr style="background-color: ##f0f0f0;">
<th>Log File</th>
<th>Size</th>
<th>Last Modified</th>
<th>Age</th>
</tr>
<cfloop array="#mockLogs#" index="logFile">
<cfset ageHours = dateDiff("h", logFile.dateLastModified, now())>
<cfoutput>
<tr>
<td>#logFile.name#</td>
<td>#numberFormat(logFile.size/1024, "0.00")# KB</td>
<td>#dateTimeFormat(logFile.dateLastModified, "yyyy-mm-dd HH:nn:ss")#</td>
<td>#ageHours# hour(s) ago</td>
</tr>
</cfoutput>
</cfloop>
</table>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
</cfcatch>
</cftry>
<hr>
Automated backup directory creator
Your database administration team performs nightly backups of critical databases. Each backup needs to be stored in a dated directory structure (e.g., `/backups/2024/11/07/`). The system must automatically create these directories before saving backup files.
Problem statement
- Backup directories must be created dynamically based on the current date
- Need year/month/day folder hierarchy for organization
- Must handle errors if directories already exist
- Need to verify directory creation success
- Should work across different operating systems
Solution
The cfdirectory tag with action="create" creates folders programatically, works with relative and absolute paths, or gracefuly handles existing directories.
<h2>Example 1: Create a Simple Backup Directory</h2>
<cftry>
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<cfset backupDir = currentDir & "demo-backups">
<!--- Check if directory exists --->
<cfif NOT directoryExists(backupDir)>
<!--- Create the directory --->
<cfdirectory action="create" directory="#backupDir#">
<p><strong>✓ Directory Created Successfully</strong></p>
<cfoutput>
<p>Created: #backupDir#</p>
</cfoutput>
<cflog file="backup_operations" type="information" text="Created backup directory: #backupDir#">
<cfelse>
<p><strong>ℹ Directory Already Exists</strong></p>
<cfoutput>
<p>Directory: #backupDir#</p>
</cfoutput>
</cfif>
<cfcatch type="any">
<p><strong>✗ Error Creating Directory:</strong></p>
<cfoutput>
<p>Message: #cfcatch.message#</p>
<p>Detail: #cfcatch.detail#</p>
</cfoutput>
<cflog file="backup_errors" type="error" text="Failed to create directory: #cfcatch.message#">
</cfcatch>
</cftry>
<hr>
<h2>Example 2: Create Date-Based Directory Structure</h2>
<cftry>
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<cfset todayDate = now()>
<cfset yearFolder = year(todayDate)>
<cfset monthFolder = numberFormat(month(todayDate), "00")>
<cfset dayFolder = numberFormat(day(todayDate), "00")>
<!--- Build nested path: backups/2024/11/07 --->
<cfset baseDir = currentDir & "demo-backups">
<cfset yearPath = baseDir & "\" & yearFolder>
<cfset monthPath = yearPath & "\" & monthFolder>
<cfset dayPath = monthPath & "\" & dayFolder>
<cfset dirsCreated = []>
<!--- Create base directory --->
<cfif NOT directoryExists(baseDir)>
<cfdirectory action="create" directory="#baseDir#">
<cfset arrayAppend(dirsCreated, "base directory")>
</cfif>
<!--- Create year directory --->
<cfif NOT directoryExists(yearPath)>
<cfdirectory action="create" directory="#yearPath#">
<cfset arrayAppend(dirsCreated, "year directory (#yearFolder#)")>
</cfif>
<!--- Create month directory --->
<cfif NOT directoryExists(monthPath)>
<cfdirectory action="create" directory="#monthPath#">
<cfset arrayAppend(dirsCreated, "month directory (#monthFolder#)")>
</cfif>
<!--- Create day directory --->
<cfif NOT directoryExists(dayPath)>
<cfdirectory action="create" directory="#dayPath#">
<cfset arrayAppend(dirsCreated, "day directory (#dayFolder#)")>
</cfif>
<p><strong>✓ Date-Based Directory Structure Ready</strong></p>
<cfoutput>
<p>Full Path: #dayPath#</p>
<p>Structure: backups\#yearFolder#\#monthFolder#\#dayFolder#\</p>
</cfoutput>
<cfif arrayLen(dirsCreated) GT 0>
<p>Created the following:</p>
<ul>
<cfloop array="#dirsCreated#" index="dirItem">
<cfoutput><li>#dirItem#</li></cfoutput>
</cfloop>
</ul>
<cfelse>
<p>All directories already existed.</p>
</cfif>
<cflog file="backup_operations" type="information" text="Backup directory structure ready: #dayPath#">
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
<cflog file="backup_errors" type="error" text="Directory creation failed: #cfcatch.message#">
</cfcatch>
</cftry>
<hr>
<h2>Example 3: Simulated Backup Process</h2>
<cftry>
<cfset backupTimestamp = dateTimeFormat(now(), "yyyy-mm-dd_HH-nn-ss")>
<cfset databases = ["CustomerDB", "OrdersDB", "InventoryDB"]>
<p><strong>✓ Simulated Backup Process</strong></p>
<p>Backup Timestamp: <cfoutput>#backupTimestamp#</cfoutput></p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;">
<tr style="background-color: ##f0f0f0;">
<th>Database</th>
<th>Backup Directory</th>
<th>Status</th>
</tr>
<cfloop array="#databases#" index="dbName">
<cfset backupPath = "backups\" & dateFormat(now(), "yyyy") & "\" & dateFormat(now(), "mm") & "\" & dateFormat(now(), "dd") & "\" & dbName>
<cfoutput>
<tr>
<td>#dbName#</td>
<td>#backupPath#</td>
<td style="color: green;">✓ Ready</td>
</tr>
</cfoutput>
</cfloop>
</table>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
</cfcatch>
</cftry>
<hr>
Media gallery manager
Your marketing team uploads product images, promotional banners, and campaign photos to various folders. They need a web-based gallery to browse, preview, and manage these media files. The system should display only image files and show thumbnails with file information.
Problem statement
- Multiple image files in different formats (JPG, PNG, GIF, WebP)
- Need to filter only image files, excluding other file types
- Display file information (size, upload date) for inventory management
- Must handle large directories with many files efficiently
- Provide visual representation of available assets
Solution
The cfdirectory tag with filtering provides a filter attribute to retrieve only specific extensions, support for wildcards and multiple patterns, or to retrieve file size, date, and other properties.
<h2>Example 1: List All CFM Files (Simulating Image Filter)</h2>
<cftry>
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<!--- List only CFM files as a demo (in production, use *.jpg|*.png|*.gif) --->
<cfdirectory
action="list"
directory="#currentDir#"
name="mediaFiles"
filter="*.cfm"
sort="name ASC">
<p><strong>✓ Files Retrieved Successfully</strong></p>
<p>Directory: <cfoutput>#currentDir#</cfoutput></p>
<p>Total Files: <cfoutput>#mediaFiles.recordCount#</cfoutput></p>
<cfif mediaFiles.recordCount GT 0>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;">
<tr style="background-color: ##f0f0f0;">
<th>File Name</th>
<th>Size</th>
<th>Upload Date</th>
<th>Age</th>
</tr>
<cfloop query="mediaFiles">
<cfset ageInDays = dateDiff("d", mediaFiles.dateLastModified, now())>
<cfoutput>
<tr>
<td>#mediaFiles.name#</td>
<td>#numberFormat(mediaFiles.size/1024, "0.00")# KB</td>
<td>#dateFormat(mediaFiles.dateLastModified, "yyyy-mm-dd")#</td>
<td>#ageInDays# day(s)</td>
</tr>
</cfoutput>
</cfloop>
</table>
<cfelse>
<p>No files found matching the filter.</p>
</cfif>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
<cflog file="gallery_errors" type="error" text="List error: #cfcatch.message#">
</cfcatch>
</cftry>
<hr>
<h2>Example 2: Filter with Multiple Extensions</h2>
<cftry>
<cfset currentDir = getDirectoryFromPath(getCurrentTemplatePath())>
<!--- Demo: List CFM and CFC files (simulating JPG|PNG|GIF filter) --->
<cfdirectory
action="list"
directory="#currentDir#"
name="allMediaFiles"
filter="*.cfm|*.cfc"
sort="datelastmodified DESC">
<p><strong>✓ Multiple File Types Retrieved</strong></p>
<p>Filter Pattern: *.cfm|*.cfc (In production: *.jpg|*.png|*.gif)</p>
<p>Found: <cfoutput>#allMediaFiles.recordCount#</cfoutput> file(s)</p>
<cfif allMediaFiles.recordCount GT 0>
<ul>
<cfloop query="allMediaFiles">
<cfset extension = listLast(allMediaFiles.name, ".")>
<cfoutput>
<li>
<strong>#allMediaFiles.name#</strong>
(#extension# | #numberFormat(allMediaFiles.size/1024, "0.00")# KB)
</li>
</cfoutput>
</cfloop>
</ul>
</cfif>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
</cfcatch>
</cftry>
<hr>
<h2>Example 3: Simulated Product Image Gallery</h2>
<cftry>
<!--- Create mock product image data --->
<cfset mockImages = [
{name: "product-laptop-2024.jpg", size: 256000, dateLastModified: now(), category: "Electronics"},
{name: "product-phone-pro.jpg", size: 189000, dateLastModified: dateAdd("d", -2, now()), category: "Electronics"},
{name: "product-headphones.png", size: 145000, dateLastModified: dateAdd("d", -5, now()), category: "Accessories"},
{name: "banner-sale-2024.jpg", size: 512000, dateLastModified: dateAdd("d", -1, now()), category: "Marketing"},
{name: "campaign-summer.gif", size: 89000, dateLastModified: dateAdd("d", -3, now()), category: "Marketing"}
]>
<p><strong>✓ Product Image Gallery (Simulated Data)</strong></p>
<p>Total Assets: <cfoutput>#arrayLen(mockImages)#</cfoutput></p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<tr style="background-color: ##f0f0f0;">
<th>File Name</th>
<th>Format</th>
<th>Size</th>
<th>Upload Date</th>
<th>Category</th>
</tr>
<cfloop array="#mockImages#" index="img">
<cfset fileExt = uCase(listLast(img.name, "."))>
<cfset sizeKB = numberFormat(img.size/1024, "0.00")>
<cfoutput>
<tr>
<td>#img.name#</td>
<td style="font-weight: bold; color: ##0066cc;">#fileExt#</td>
<td>#sizeKB# KB</td>
<td>#dateFormat(img.dateLastModified, "yyyy-mm-dd")#</td>
<td>#img.category#</td>
</tr>
</cfoutput>
</cfloop>
</table>
<!--- Summary statistics --->
<cfset totalSize = 0>
<cfloop array="#mockImages#" index="img">
<cfset totalSize = totalSize + img.size>
</cfloop>
<p><strong>Gallery Statistics:</strong></p>
<ul>
<cfoutput>
<li>Total Files: #arrayLen(mockImages)#</li>
<li>Total Size: #numberFormat(totalSize/1024/1024, "0.00")# MB</li>
<li>Average File Size: #numberFormat((totalSize/arrayLen(mockImages))/1024, "0.00")# KB</li>
</cfoutput>
</ul>
<cfcatch type="any">
<p><strong>✗ Error:</strong> <cfoutput>#cfcatch.message#</cfoutput></p>
</cfcatch>
</cftry>
<hr>