dir関数でたくさんあるファイルから読み込みファイルだけをとる方法は?

解決


ミリー  2004-06-18 14:31:45  No: 84105  IP: [192.*.*.*]

dir ("C:\*.*",vbReadOnly)
この関数を使いCのルートディレクトリの中の読み取り専用のファイルの名前だけを取りたいのですができません。先頭のファイルだけを返してきます。
HELPでは*も使えるとかいてあるのですが・・dirは使わないほうがいいのでしょうか?

編集 削除
nanashi  2004-06-18 15:08:20  No: 84106  IP: [192.*.*.*]

その後、何も返さなくなるまでDir関数を呼べば取れます。

Dim sFile As String

sFile = Dir("C:\*.*", vbReadOnly)

Do Until (Len(sFile) = 0)
    Debug.Print sFile
    sFile = Dir
Loop

編集 削除
ミリー  2004-06-18 15:32:32  No: 84107  IP: [192.*.*.*]

早い回答ありがとうございました。おかげさまで解決しました。
コーディングしていて1つ気づいたことを補足しておきますね

Private Sub Command1_Click()
    Dim sFile As String
    
    sFile = Dir("C:\*.*", vbReadOnly)
    sFile = Dir
    Do Until (Len(sFile) = 0)
        Debug.Print sFile
        sFile = Dir
    Loop
  
End Sub

dir関数ははじめに返す戻り値(ファイル名)はそのフォルダーにある最初のファイル名らしいです。なのではじめの戻り値だけは飛ばしました。

nanashiさんありがとうございました。

編集 削除
nanashi  2004-06-18 16:15:27  No: 84108  IP: [192.*.*.*]

> dir関数ははじめに返す戻り値(ファイル名)はそのフォルダーにある最初のファイル名らしいです。
> なのではじめの戻り値だけは飛ばしました。

それ、試した上での発言ですかね?
最初のファイルを飛ばして問題なければイイんですが…。

編集 削除
ミリー  2004-06-18 17:13:19  No: 84109  IP: [192.*.*.*]

すいません><試したファイル2個だっため正確な結果が得られませんでした。

やはりdir関数をループでまわしてファイル名を吐き出しても読み取り専用ファイルの名前だけ返してくれないようです。フォルダーの中にあるすべてのファイルを吐き出してしますようです。

編集 削除
ei  2004-06-18 18:53:44  No: 84110  IP: [192.*.*.*]

試してみたのですが
確かに全てのファイル名を返してしまいました。

dir関数ではないですが
これでどうでしょうか?
FileSystemObjectです。
詳しくはヘルプでも見て下さい。

    Dim objFSO      As Object
    Dim objFolder   As Object
    Dim objFile     As Object

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("c:\")

    For Each objFile In objFolder.Files
        If objFile.Attributes And 1 Then
            Debug.Print objFile.Name
        End If
    Next

編集 削除
ミリー  2004-06-18 22:16:18  No: 84111  IP: [192.*.*.*]

eiさん1つの回答ありがとうございます。
dir関数の謎は謎のままですが・・・とりあえずこのやり方でやってみます。
eiさんnanashiさんありがとうございました。

編集 削除