Solved

# Mass delete files from server?

Posted on 2011-03-19
Medium Priority
348 Views
I'm letting my members update multi images at the same time using a form. If I wanted to let them select the images they wanted to delete, how do I delete the files off the server. Do I use some form of a loop. I'm using cffile action for one but don't know how to do more then one at the same time??
0
Question by:overcolor
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 52

Accepted Solution

_agx_ earned 2000 total points
ID: 35173904
Yep. You'd loop and delete each file separately.  Say your delete option is a bunch of checkboxes with the same name. The user selects the image records they want to delete. The selected record numbers are submitted as a list:

ie   form.selectedImages = 1,4,5,6,22

Use the list to query your db and return the file names you want to delete

<cfparam name="form.selectedImages" default="0">
<cfquery name="getImagesToDelete" ....>
SELECT   FileName
FROM      YourTable
WHERE   RecordID IN (
<cfqueryparam value="#form.selectedImages#" list="true" cfsqltype="cf_sql_integer">
)
</cfquery>


Then loop through the query and delete each file

<cfloop query="getImagesToDelete">
<cffile action="delete" file="c:\path\to\#FileName#">
</cfloop>


0

Author Comment

ID: 35174103
@Agx

Here is what I'm using now, is this correct?

<cfif isdefined('deleteimage')>

<cfif fileExists('#mainsitepath#\images\photos\thumbs\#pics.image#')>

<cffile
action = "delete"
file = "#mainsitepath#\images\photos\thumbs\#pics.image#">
</cfif>

<cfparam name="form.deleteImage" default="">

<cfif listLen(form.deleteImage)>
<cfquery datasource="#dns#">
DELETE FROM photos
WHERE  ID  IN
(
<cfqueryparam value="#form.deleteImage#" cfsqltype="cf_sql_integer" list="true">
)
</cfquery>
</cfif>

</cfif>

0

LVL 52

Expert Comment

ID: 35185374
Sorry for the delayed response.

Almost.  To delete multiple files, you'd need to run a query first so you can retrieve the physical file names. Once you have the query, loop through it and delete the files. Finally, delete the db records.

I don't know all of your column names, but it'd be something like this (not tested)

<cfparam name="form.deleteImage" default="">

<!--- if there's something to delete ....--->
<cfif listLen(form.deleteImage)>

<!--- first get names of the files to be deleted ---->
<cfquery name="getImagesToDelete" datasource="#dns#">
SELECT   ID, TheFileName
FROM      photos
WHERE   ID IN (
<cfqueryparam value="#form.deleteImage#" list="true" cfsqltype="cf_sql_integer">
)
</cfquery>

<!--- next delete the image files on disk ---->
<cfloop query="getImagesToDelete">
<cfset pathToImage = "#mainsitepath#\images\photos\thumbs\#TheFileName#">
<cfif FileExists(pathToImage)>
<cffile action="delete" file="#pathToImage#">
</cfif>
</cfloop>

<!--- finally, delete the image records ---->
<cfquery datasource="#dns#">
DELETE FROM photos
WHERE  ID  IN
(
<cfqueryparam value="#form.deleteImage#" cfsqltype="cf_sql_integer" list="true">
)
</cfquery>
</cfif>

0

## Featured Post

Question has a verified solution.

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

Hey folks, 'bout time for me to come around with a little tip. Thanks to IIS 7.5 Extensions and Microsoft (well... really Windows 8, and IIS 8 I guess...), we can now prime our Application Pools, when IIS starts. Now, though it would be nice t…
Introduction This article explores the design of a cache system that can improve the performance of a web site or web application.  The assumption is that the web site has many more “read” operations than “write” operations (this is commonly the ca…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…
###### Suggested Courses
Course of the Month10 days, 12 hours left to enroll