I am creating a console app that will delete pictures from a directory every 30 minutes. Problem is that its being populated by files every minute or so. So if I go and delete files in that directory then it may cause an error trying to delete a file thats being created just then or opened.
I currently have this code to copy the files to another directory and then delete them from the source directory.
Dim f() As String = Directory.GetFiles(sourceDir)
For i As Integer = 0 To UBound(f)
'Check file date here in IF statement FIRST...
File.Copy(f(i), destDir & f(i).Replace(sourceDir, ""))
If File.Exists(f(i)) = True Then
File.Delete(f(i))
End If
Debug.Print(f(i) & " to >>> " & destDir & f(i).Replace(sourceDir, ""))
Next
How can I use:
File.GetCreationTime(f(i))
in an IF statement checking IF the currently file its on is newer than 30 seconds ago?
OR
Is there a way of only populating:
Dim f() As String = Directory.GetFiles(sourceDir)
with only those files that are more than 30 seconds old?
There isn’t a reliable way to detect if a file is locked or not. Even if you did find out (it is technically possible), it could be locked before you tried to delete it. There are other reasons a delete may fail. In your case, I don’t think it matters what the reason was.
The only way is to put the call to delete in a try/catch and trap IOException, and then retry if you want.
You need to use a FileInfo object to get the
CreatedTimeand compare to Now. You can also useLastAccessTimeorLastWriteTime, but since these are all new files being written then, you don’t need to.IsFileLockedfunction lifted from this other thread on SO