Solved

FileSystemObject - DeleteFile problem

Posted on 2003-12-01
6
832 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
[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
  • Learn & ask questions
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
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 
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

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

I recently decide that I needed a way to make my pages scream on the net.   While searching around how I can accomplish this I stumbled across a great article that stated "minimize the server requests." I got to thinking, hey, I use more than one…
Hello, all! I just recently started using Microsoft's IIS 7.5 within Windows 7, as I just downloaded and installed the 90 day trial of Windows 7. (Got to love Microsoft for allowing 90 days) The main reason for downloading and testing Windows 7 is t…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…

617 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