colección ASP FileSystemObject no se puede acceder por el índice
-
21-08-2019 - |
Pregunta
¿Voy loco? No puedo encontrar una manera de controlar la primer archivo en una carpeta con FileSystemObject (ASP clásico). Con la mayoría de las colecciones se podría pensar que el índice 0 o 1 podría funcionar, pero IIS dice "no válida llamada a procedimiento o argumento".
Ninguna de estas 2 últimas líneas de trabajo:
Set oFileScripting = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFileScripting.GetFolder(sFolder)
Set oFiles = oFolder.Files
If oFiles.Count = 0 Then Response.Write "no files"
Response.Write oFiles(0).Name
Response.Write oFiles.Item(1).Name
Soy que es mega-estúpida, o no hay ninguna manera de utilizar un índice para acceder a esta colección en particular?
Solución
La colección de archivos no es un conjunto, y no contiene funcionalidad de acceso aleatorio. Si necesita absolutamente esta funcionalidad, lo más parecido a imitar sería iterar a través de la carpeta y crear una nueva matriz que contiene los nombres de los archivos encontrados, utiliza esta nueva matriz como la fuente de acceso aleatorio, y crear objetos de archivo de la valores de matriz.
ReDim FileArray(oFiles.Count)
i = 0
For Each oFile In oFiles
FileArray(i) = oFile.Name
i = i + 1
Next
Set oFile = oFileScripting.GetFile(sFolder + "\" + FileArray(0))
Sin duda, no recomiendo esto si es posible evitarlo.
Otros consejos
No, pero se puede enumerar y realizar un seguimiento del índice de sí mismo:
Set oFileScripting = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFileScripting.GetFolder(sFolder)
Set oFiles = oFolder.Files
If oFiles.Count = 0 Then Response.Write "no files"
i = 0
For Each oFile In oFiles
Response.Write i & " = " & oFile.Name
i = i + 1
Next