Jim M
asked on
ASP FSO delete files from server that are not in database
Hello All,
I am working on a classic ASP project and trying to loop through folders and delete certain files.
I have a main folder which has many subfolders.
Each subfolder can be empty or can contain multiple files.
I have the list of “in-use” files in a database. These are files I do not want to delete. I want to delete all files off the server that do not exist in the database.
The same filename can exist in different folders, so filename itself is not unique, however the folder + filename is unique.
I’ve worked on this for over a day and still cannot get it right; here’s what I have (not working code):
<%
Dim dbFilePath, DaFolder, objFSO, mainFolder, aFolder, aFolderCollection
dbFilePath = rsGetFiles.Fields.Item("va rPath").Va lue
'varPath field = foldername and file name (17\sample_upload_me.pdf)
' Also have these fields available:
'varFileName = sample_upload_me.pdf
'varFolderName =17
DaFolder = Server.MapPath("../Certifi cation/Tra cking") & "\"
Set objFSO = CreateObject("Scripting.Fi leSystemOb ject")
Set mainFolder = objFSO.GetFolder(DaFolder)
Set aFolderCollection = mainFolder.subfolders
Do Until rsGetFiles.EOF
For Each aFolder in aFolderCollection
For Each aFile in aFolder.Files
sFilePath = aFolder.name & "\" & aFile.name
If sFilePath <> dbFilePath AND objFSO.FileExists(aFile) Then
'If objFSO.FileExists(aFile) Then
'objFSO.DeleteFile(sFilePa th)
'End If
End If
Next 'file
Next 'folder
rsGetFiles.MoveNext
loop
%>
Thanks in advance for your help!
-g8tor
I am working on a classic ASP project and trying to loop through folders and delete certain files.
I have a main folder which has many subfolders.
Each subfolder can be empty or can contain multiple files.
I have the list of “in-use” files in a database. These are files I do not want to delete. I want to delete all files off the server that do not exist in the database.
The same filename can exist in different folders, so filename itself is not unique, however the folder + filename is unique.
I’ve worked on this for over a day and still cannot get it right; here’s what I have (not working code):
<%
Dim dbFilePath, DaFolder, objFSO, mainFolder, aFolder, aFolderCollection
dbFilePath = rsGetFiles.Fields.Item("va
'varPath field = foldername and file name (17\sample_upload_me.pdf)
' Also have these fields available:
'varFileName = sample_upload_me.pdf
'varFolderName =17
DaFolder = Server.MapPath("../Certifi
Set objFSO = CreateObject("Scripting.Fi
Set mainFolder = objFSO.GetFolder(DaFolder)
Set aFolderCollection = mainFolder.subfolders
Do Until rsGetFiles.EOF
For Each aFolder in aFolderCollection
For Each aFile in aFolder.Files
sFilePath = aFolder.name & "\" & aFile.name
If sFilePath <> dbFilePath AND objFSO.FileExists(aFile) Then
'If objFSO.FileExists(aFile) Then
'objFSO.DeleteFile(sFilePa
'End If
End If
Next 'file
Next 'folder
rsGetFiles.MoveNext
loop
%>
Thanks in advance for your help!
-g8tor
ASKER
Thanks for the post...
"Rather than using the list of valid folders/files as the outer loop, I would just traverse the folders/subfolders and hit the DB to verify keep or discard."
Yes, that is what I am trying to do, I just do not know how to structure it. Can you post working code?
"Rather than using the list of valid folders/files as the outer loop, I would just traverse the folders/subfolders and hit the DB to verify keep or discard."
Yes, that is what I am trying to do, I just do not know how to structure it. Can you post working code?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Ok, I found a solution, though it is not the ideal solution I was hoping to get. I adjusted the code on some of the other pages to delete the old file before the associated record is deleted, and delete the old file before a new one is uploaded for the same record. Then once a day I'll just delete all folders (and the files within them) where the person associated with them is no longer a member. That query yields a "positive list" and I am essentially using your step #2.
ASKER
Was hoping for working code, but apparently 500 points wasn't sufficient 'incentive'. Solution gave me ideas about how to reconfigure my approach to the problem, but was only a partial solution.
You can always show your work and ask for help.
What you may not get is someone else's working code.
It's always nice to talk to you before you go. If you would have shown me what you came up with, I would gladly have commented on that.
I was not in any way being antagonistic - this isn't a "you" vs "us" kind of place; we are in this together. I'm sorry if your ecpectations weren't met.
What you may not get is someone else's working code.
It's always nice to talk to you before you go. If you would have shown me what you came up with, I would gladly have commented on that.
I was not in any way being antagonistic - this isn't a "you" vs "us" kind of place; we are in this together. I'm sorry if your ecpectations weren't met.
You are working with a negative list, that is, you want to delete everything not in the DB. You must have a boundary - a starting and ending folder - but you will still have to check every file within that boundary against the DB.
OR...
Run through the DB and look for a match on the hard drive. If the folder/file is found, move (or copy) it to a new location (c:/TempNew/folder/filenam
This is more efficient (and simpler) because you know what to look for.