WriteFileAndDirectories(fileAndPath, fileOutput[, fileAndPathMode][, fileAddNewLine][, fileAttributes])
Last updated October 15, 2002
Version: 1 | Requires: CF6 | Library: FileSysLib
	Description: 
	Automatically creates any missing directories before writing to the specified file. All created directories and the file being written to are locked with "exclusive" access to avoid issues between concurrently running scripts. Some code based on Raymond Camden's DirectoryCreate() and FileWrite() functions.
	Return Values: 
	Returns void.
Example:
<!---
<cfset WriteFileAndDirectories("c:\neotestingzone\madedir\madefile.txt", "This is only a test.")>
--->
Parameters:
| Name | Description | Required | 
|---|---|---|
| fileAndPath | Full pathname for the file to be created. | Yes | 
| fileOutput | Text to be saved to the file. | Yes | 
| fileAndPathMode | Mode to use when creating directories and the file. | No | 
| fileAddNewLine | Boolean that determines if a newline should be entered at the end of the file. Defaults to false. | No | 
| fileAttributes | Attributes to use for the new file. | No | 
Full UDF Source:
<!---
 Automatically creates any missing directories before writing to the specified file.
 
 @param fileAndPath      Full pathname for the file to be created. (Required)
 @param fileOutput      Text to be saved to the file. (Required)
 @param fileAndPathMode      Mode to use when creating directories and the file. (Optional)
 @param fileAddNewLine      Boolean that determines if a newline should be entered at the end of the file. Defaults to false. (Optional)
 @param fileAttributes      Attributes to use for the new file. (Optional)
 @return Returns void. 
 @author Shawn Seley (shawnse@aol.com) 
 @version 1, October 15, 2002 
--->
<cffunction name="WriteFileAndDirectories" output="false" returnType="void">
    <cfargument name="fileAndPath"      type="string"   required="true">
    <cfargument name="fileOutput"       type="string"   required="true">
    <cfargument name="fileAndPathMode"  type="string"   required="false"  default="">
    <cfargument name="fileAddNewLine"   type="boolean"  required="false"  default="yes">
    <cfargument name="fileAttributes"   type="string"   required="false"  default="">
    <cfset var path_array     = ListToArray(fileAndPath, "\")>
    <cfset var this_dir_path  = path_array[1]>   <!--- first item in fileAndPath is the drive path --->
    <cfset var file_name      = path_array[ArrayLen(path_array)]>   <!--- last item in fileAndPath is the file name --->
    <cfset var second_last    = ArrayLen(path_array)-1>
    <cfset var i = 0>
    <!--- lock these directories and files to prevent errors with concurrent threads --->
    <cflock timeout="30" throwontimeout="Yes" name="WriteFileAndDirectoriesLock" type="EXCLUSIVE">
        <!--- create any missing directories --->
        <cfloop index="i" from="2" to="#second_last#">
            <cfset this_dir_path = this_dir_path & "\" &  path_array[i]>
            <cfif not DirectoryExists(this_dir_path)>
                <cfif fileAndPathMode is "">
                    <cfdirectory action="CREATE" directory="#this_dir_path#">
                <cfelse>
                    <cfdirectory action="CREATE" directory="#this_dir_path#" mode="#fileAndPathMode#">
                </cfif>
            </cfif>
        </cfloop>
        <!--- write the file to the now confirmed/created directory path --->
        <cfif fileAndPathMode is "">
            <cffile action="WRITE" file="#fileAndPath#" output="#fileOutput#" addNewLine="#fileAddNewLine#" attributes="#fileAttributes#">
        <cfelse>
            <cffile action="WRITE" file="#fileAndPath#" output="#fileOutput#" mode="#fileAndPathMode#" addNewLine="#fileAddNewLine#" attributes="#fileAttributes#">
        </cfif>
    </cflock>
</cffunction>
Search CFLib.org
Latest Additions
									
									Raymond Camden added 
									QueryDeleteRows 
									November 04, 2017
								
								
									
									Leigh added 
									nullPad 
									May 11, 2016
								
								
									
									Raymond Camden added 
									stripHTML 
									May 10, 2016
								
								
									
									Kevin Cotton added 
									date2ExcelDate 
									May 05, 2016
								
								
									
									Raymond Camden added 
									CapFirst 
									April 25, 2016