Solved

FileSystemObject - DeleteFile problem

Posted on 2003-12-01
6
816 Views
Last Modified: 2009-12-16
Hello,

I have some code in a script which is executed every 15 or so minutes.  This code erases documents off the server which are older than a day.  Unfortunatly, I cannot get the DeleteFile statement to work, as it always comes up with "File cannot be found" even if I point directly to the file.  (Ultimately, though, I would want to use wildcards).

Heres the code I have:

--------------------------
Dim objFile
      Set objFile = CreateObject("Scripting.FileSystemObject")

Set rsClean = Server.CreateObject("ADODB.Recordset")

SQLClean = "SELECT * FROM CleanupData WHERE NOT CleanupID = 1"

'Set the lock type so that the record is locked by ADO when it is updated
rsClean.LockType = 3

rsClean.Open SQLClean, objConn

Do While Not rsClean.EOF
      IF DateDiff("d", rsClean("RecordDate"), Now() > 1) THEN
            'objFile.DeleteFile "..\EngagementDocs\" & rsClean("RandomNumber") & "*.doc", True
            objFile.DeleteFile "..\EngagementDocs\Ew9681m130EO21969c93_AuthoritytoAccessClientInfo.doc", True
      END IF

      rsClean.MoveNext

loop
rsClean.Close
Set rsClean = nothing
Set objConn = nothing
-----------------------------

An example document which would be on the server would be something like my hardcoded document (Ew9681m130EO21969c93_AuthoritytoAccessClientInfo.doc).  Each person who uses the system has a random number and they are able to create a variety of documents.  Their random number, however, changes on a daily basis, so the existing documents would be worthless after a day.  The "RecordDate" field is saved after the user has executed a script which creates the document.

Any help would be appreciated
0
Comment
Question by:Sebastion
6 Comments
 
LVL 4

Expert Comment

by:c_swanky
ID: 9855008
Try adding the full path

D:\html\doc\EngagementDocs\
0
 
LVL 4

Accepted Solution

by:
c_swanky earned 100 total points
ID: 9855085
'-- find the absolute path to your folder
sPath = Server.MapPath("..\EngagementDocs\")

Do While Not rsClean.EOF
     IF DateDiff("d", rsClean("RecordDate"), Now() > 1) THEN
          'objFile.DeleteFile(sPath & "\" & rsClean("RandomNumber") & "*.doc"), True
     END IF

     rsClean.MoveNext

loop
0
 
LVL 4

Expert Comment

by:c_swanky
ID: 9855184
1) It's bound to happen that for whatever reason a doc that's in your db may NOT be in the folder, so I added logic so your page does not error out.

2) I also moved the datediff comparison to the sql statement and limited the fields returned  from * to only the RandomNumber (no point in returning all the fields if you're not going to use them)


=== code sample below ====

Dim objFile
Set objFile = CreateObject("Scripting.FileSystemObject")

Set rsClean = Server.CreateObject("ADODB.Recordset")
SQLClean = "SELECT RandomNumber FROM CleanupData WHERE NOT CleanupID = 1 and (datediff(dd,RecordDate,getdate()) > 1)"

'Set the lock type so that the record is locked by ADO when it is updated
rsClean.LockType = 3

rsClean.Open SQLClean, objConn

'-- find the absolute path to your folder
sPath = Server.MapPath("..\EngagementDocs\")

Do While Not rsClean.EOF

      '-- concat path and .doc name
      sFullName = (sPath & "\" & rsClean("RandomNumber") & "*.doc")

      '-- check if file exists
      If objFile.FileExists(sFullName) Then
      
            '-- delete file
                                objFile.DeleteFile(sFullName), True      
      Else
            '-- notify that file was not found (you can also write this out to a log file)
            Response.Write("File" & sFullName & " could NOT be found<br>")
      End If

    rsClean.MoveNext

loop

rsClean.Close
Set rsClean = nothing
Set objConn = nothing
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Expert Comment

by:lowRider
ID: 9855478
That error actually means "permission denied". You probably need to impersonate a user, as the script is probably running within the context of the IWAM_<computername> or IUSR_<computername> account. I had this same problem and after creating a simple little DLL, it worked perfectly. See this article:

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q248/1/87.ASP&NoWebContent=1

Regards,
lowRider
0
 
LVL 2

Expert Comment

by:Sairam_S
ID: 9855759
INSTEAD OF THE CODE BELOW, CHANGE IT AS ..
Do While Not rsClean.EOF
     IF DateDiff("d", rsClean("RecordDate"), Now() > 1) THEN
          'objFile.DeleteFile "..\EngagementDocs\" & rsClean("RandomNumber") & "*.doc", True
          objFile.DeleteFile "..\EngagementDocs\Ew9681m130EO21969c93_AuthoritytoAccessClientInfo.doc", True
     END IF

     rsClean.MoveNext

loop


NEW CODE::
Do While Not rsClean.EOF
     IF DateDiff("d", rsClean("RecordDate"), Now() > 1) THEN
          objFile.DeleteFile Server.Mappath("../EngagementDocs/Ew9681m130EO21969c93_AuthoritytoAccessClientInfo.doc"), True
     END IF

     rsClean.MoveNext

loop
0
 

Author Comment

by:Sebastion
ID: 9862613
Hey,

Sorry it took awhile for me to answer, when I posted this question I didn't get back to the computer in order to test some of the replies.  I accepted the first answer which worked for me, so thanks c_swanky.  I never could get my head around the amount of backslashes in those statements (ie, your solution would, at first glance, make the path "..\EngagementDocs\\Number.doc", with the double back slashes).  I had a similar instance with that before in some other code.
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

I would like to start this tip/trick by saying Thank You, to all who said that this could not be done, as it forced me to make sure that it could be accomplished. :) To start, I want to make sure everyone understands the importance of utilizing p…
Have you ever needed to get an ASP script to wait for a while? I have, just to let something else happen. Or in my case, to allow other stuff to happen while I was murdering my MySQL database with an update. The Original Issue This was written…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

746 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now