2009-05-11 4 views
3

Est-ce que je deviens fou? Je ne trouve pas un moyen d'obtenir le premier fichier dans un dossier avec le FileSystemObject (ASP classique). Avec la plupart des collections, vous pensez que l'index 0 ou 1 peut fonctionner, mais IIS dit "Appel ou argument de procédure invalide".La collection ASP FileSystemObject n'est pas accessible par l'index

Aucune de ces 2 dernières lignes fonctionnent:

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 

Suis-je méga-bête, ou est-il pas moyen d'utiliser un index pour accéder à cette collection particulière?

Répondre

3

La collection de fichiers est pas un tableau, et ne contient pas la fonctionnalité d'accès aléatoire. Si vous avez absolument besoin de cette fonctionnalité, la chose la plus proche pour l'imiter serait de parcourir le dossier et de créer un nouveau tableau contenant les noms des fichiers trouvés, utiliser ce nouveau tableau comme source d'accès aléatoire et créer des objets File à partir du Valeurs de tableau

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)) 

Je ne recommanderais certainement pas cela si c'est à éviter.

+0

Je pensais (en général) que les collections pouvaient être accédées aléatoirement par item bumber? Malheureusement, cet article ne mentionne pas FileSystemObject - http://msdn.microsoft.com/en-us/library/ms525228.aspx –

+1

En général, les collections peuvent être accessibles via la numérotation d'index, mais la collection de fichiers n'est pas une collection normale. Il a une propriété item, mais il semble que la clé qu'il utilise soit filename. c.f. http://www.devguru.com/Technologies/vbscript/quickref/filescoll_item.html – dpmattingly

0

Non, mais vous pouvez les énumérer et de suivre l'index vous:

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 
+0

Oui, la boucle est facile à faire, mais si vous voulez juste attraper le premier et l'utiliser tout de suite .....?! –

Questions connexes