Entries Tagged as '<CFDIRECTORY>'

Using ColdFusion to Count the Files in a Directory - Part II

<CFDIRECTORY> , Microsoft FileSystemObject 2 Comments »

So back on March 5th I wrote a post about Using Cold Fusion to Count the Files in a Directory.  Recently a component I wrote that keeps an eye on mail server processes choked to death on the large number of files it had to report on.  Another component in the mail server failed (one vendor updated their component without telling another vendor about it, yada yada) and the mail queue backed up.  With scores of thousands of files in the directory, I found CFDIRECTORY to be kind of slow.

So.  I wrote a new function to that uses the FileSystemObject to look at a single directory, and I think it might work better.  I pointed it at a photo gallery that had a large number of files and it was very responsive.   Here’s hoping, right?  Regardless, it’s another way of counting files in a folder; I’m sure I’ll need this again someday, and that’s what this blog is all about, right?  Maybe you’ll find it handy, too.

Here’s the idea:

<cffunction name="fileCountFSO" returnType="numeric" output="false">


<cfargument name="folderLoc" required="no">
<cfparam name="folderLoc" default="">


<cflock 
timeout ="30" 
throwontimeout ="No" 
name ="#CreateUUID()#" 
type ="EXCLUSIVE"
>


<cftry>


<cfobject 
type="COM" 
name ="FSO" 
class ="Scripting.FileSystemObject" 
action ="CONNECT"
/>


<cfcatch>


<cfobject 
type="COM" 
name="FSO" 
class="Scripting.FileSystemObject" 
action="CREATE"
/>


</cfcatch> 


</cftry>
 
</cflock>


<cftry>


<cfscript>


objFolderFiles = FSO.getFolder(folderLoc).Files;
objFolderCount = objFolderFiles.Count;


</cfscript> 


<cfcatch>


<cfset objFolderCount = 0>


</cfcatch>


</cftry>


<cfreturn #objFolderCount#>


</cffunction>

Using ColdFusion to Count the Files in a Directory

<CFDIRECTORY> 3 Comments »

I’m frequently building dashboard tools, and this is a handy and simple trick.  It basically uses CFDIRECTORY to build a query, and then queries the query for Type = ‘File’.  I just ask for a COUNT in the second QUERY, since I’m not really interested in the other data and like to keep things fast.

Here’s the code as a handy function that you can drop into a component.

<cffunction name="fileCount" returnType="numeric" output="false">

<cfargument 	name="folderLoc" 		required="no">
<cfparam 			name="folderLoc" 		default="">

<cfdirectory directory="#folderLoc#" action="list" recurse="true" name="getAllFolders">

<cfquery 
	name			="examineThis" 
	dbtype		="query"
	>
  SELECT    COUNT(*) AS NumberOfFiles
  FROM    	getAllFolders
  WHERE    	Type = 'File'
</cfquery>

<cfreturn #val(examineThis.NumberOfFiles)#>

</cffunction>
Powered by Mango Blog. Initial Template Design and Icons by N.Design Studio, modified by Michael Cummins.
RSS Feeds