Solved

Count files in one directory filtered by a set of filetypes

Posted on 2008-10-03
9
926 Views
Last Modified: 2012-06-21
How to count the number of files by file type in one directory when not only one file type is searched but two or more file types, e.g.: .jpg,.gif,.png
The file types are not fixed but provided by a variable. Here an example:
<cfset fileTypes=".jpg,.gif,.png" >
Result needed is only the number of files not the list of files.

Best solution will get all points, no split, so be serious that you have a better solution then Query of Queries from a cfdirectory.

0
Comment
Question by:Zvonko
9 Comments
 
LVL 19

Expert Comment

by:erikTsomik
ID: 22637664
0
 
LVL 63

Author Comment

by:Zvonko
ID: 22637685
Sorry, the cfset example was misleading.
Every user has a different value for his fileTypes.
0
 
LVL 2

Expert Comment

by:daviddriv
ID: 22637707
Well, in VBScript, I would split the list of file types into an array, iterate through the array, and search the file list for files with that extension and use a variable to hold the count...  Or, even better, in Linux I would ls -ld *.jpg *.gif *.png | wc -l
0
How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

 
LVL 63

Author Comment

by:Zvonko
ID: 22637786
Sorry, I assumed it is obvious from the question Zone: the solution should work on ColdFusion application server and should not depend on OS file system or tools.
0
 
LVL 14

Expert Comment

by:Scott Bennett
ID: 22638274
If you don't want to do a query of queries, then the best way to get the numbers is probably to cfloop through your list of filters, do a cfdirectory for each file type and then use the record count from the result set. Like this
<cfset fileTypes=".jpg,.gif,.png,.htm" >
<cfloop list="#fileTypes#" index="i">
<cfdirectory action="LIST" directory="#expandpath('/POToOracle')#" filter="*#i#" sort="name" name="results">
<cfoutput>#i# - #results.recordcount# files<br></cfoutput>
</cfloop>

Open in new window

0
 
LVL 63

Author Comment

by:Zvonko
ID: 22638335
OK, then sorry again I have not limited the cfdirectory to one call. But that is the requirement.
0
 
LVL 25

Accepted Solution

by:
dgrafx earned 500 total points
ID: 22638550
#arraylen(REMatch(replace(lcase(fileTypes),",","|","all"), lcase(valuelist(files.name))))#

where files is the cfdirectory query
and fileTypes is the ".jpg,.gif,.png" list variable

as is common with regex - very fast
0
 
LVL 63

Author Comment

by:Zvonko
ID: 22639621
Thanks dgrafx.
For better understanding here the cfdump output from one example:
<title>dgrafx's types</title>
 
<cfdirectory directory="#GetDirectoryFromPath(GetTemplatePath())#vw" name="files" action="LIST" >
 
<cfset fileTypes=".jpg,.gif,.png" >
<cfset numret=arraylen(REMatch(replace(lcase(fileTypes),",","|","all"), lcase(valuelist(files.name))))>
 
<cfoutput>
filenames:#lcase(valuelist(files.name))#<br>
types: #replace(lcase(fileTypes),",","|","all")#<br>
<cfdump var="#REMatch(replace(lcase(fileTypes),",","|","all"), lcase(valuelist(files.name)))#" >
 
numret: #numret#
</cfoutput>

Open in new window

dgrafxtypes.jpg
0
 
LVL 63

Author Closing Comment

by:Zvonko
ID: 31502912
Thanks dgrafx for sharing your nice solution.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

CFGRID Custom Functionality Series -  Part 1 Hi Guys, I was once asked how it is possible to to add a hyperlink in the cfgrid and open the window to show the data. Now this is quite simple, I have to use the EXT JS library for this and I achiev…
Recently while working on a project I got a very annoying cfdocument has no body error message. I had never seen this error before. So I checked the code. The code was pretty simple; it was Just showing me the cfdocumnt tag and inside that tag a …
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

740 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question