6

I need to loop through the files in a given folder in descending order of 'Last Modified Date'.

In the first iteration of the loop I need to be able to open the most recently modified file for reading and close it. In the second iteration, I need to be able to open the 2nd most recently updated file for reading and close it etc.

  1. Is there a built in method that allows a FileSystemObject to sort the files or do we absolutely have to write custom sorting routine?

  2. If we have to go with a custom sorting routine, is it possible to write this without having multiple functions? i.e. all code in the a main function.

  3. Speed is a concern since there are to be a lot of files to sort through. Therefore any custom procedures should be efficient.

Ansgar Wiechers
  • 193,178
  • 25
  • 254
  • 328
slayernoah
  • 4,382
  • 11
  • 42
  • 73

1 Answers1

10

You could read the file names and dates into a disconnected recordset and sort that by date:

Set fso = CreateObject("Scripting.FileSystemObject")

Set list = CreateObject("ADOR.Recordset")
list.Fields.Append "name", 200, 255
list.Fields.Append "date", 7
list.Open

For Each f In fso.GetFolder("C:\some\where").Files
  list.AddNew
  list("name").Value = f.Path
  list("date").Value = f.DateLastModified
  list.Update
Next

list.MoveFirst
Do Until list.EOF
  WScript.Echo list("date").Value & vbTab & list("name").Value
  list.MoveNext
Loop

list.Sort = "date DESC"

list.MoveFirst
Do Until list.EOF
  WScript.Echo list("date").Value & vbTab & list("name").Value
  list.MoveNext
Loop

list.Close
Ansgar Wiechers
  • 193,178
  • 25
  • 254
  • 328
  • Thanks a lot. I will try this out and let you know! – slayernoah May 13 '13 at 14:59
  • This script echoes the list of files twice. Once in arbitrary order, then once sorted by date. Just mentioning this in case anyone is wondering why the list echoed first is not sorted. – u17 Sep 30 '17 at 19:33