2009-05-11 10 views
3

私は怒っていますか? FileSystemObject(従来のASP)を持つフォルダの最初のファイルを取得する方法が見つかりません。ほとんどのコレクションでは、インデックス0または1が機能するかもしれないと思いますが、IISには「無効なプロシージャコールまたは引数」と表​​示されます。インデックスでASP FileSystemObjectコレクションにアクセスできません

どちらもこれらの最後の2行のは働く:

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 

私はメガ愚かであること、またはこの特定のコレクションにアクセスするためにインデックスを使用する方法はありませんかな?

答えて

3

をファイルコレクションは、Arrayはなく、ランダムアクセス機能が含まれていません。この機能が絶対に必要な場合は、フォルダを繰り返し処理し、見つかったファイルの名前を含む新しいArrayを作成し、この新しい配列をランダムアクセスソースとして使用し、配列の値。

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

私は確かにこれを避けることはできません。

+0

私は、(一般的に)コレクションはアイテムバブルによってランダムにアクセスできると思いましたか?残念ながら、この記事ではFileSystemObjectについては言及していません - http://msdn.microsoft.com/en-us/library/ms525228.aspx –

+1

一般に、コレクションはインデックスの番号付けでアクセスできますが、ファイルコレクションは通常のコレクションではありません。それはアイテムプロパティを持っていますが、それが使用するキーがファイル名であるように見えます。 c.f. http://www.devguru.com/Technologies/vbscript/quickref/filescoll_item.html – dpmattingly

0

ありませんが、あなたがそれらを列挙し、インデックスを自分で追跡することができます:

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

ええ、ループは簡単ですが、最初のものをつかんでそのまま使用したい場合は.....? –

関連する問題