ページ 11

指定したフォルダ

Posted: 2006年5月19日(金) 20:25
by C1000
指定したフォルダの中に入っているファイル名を取得するにはどのような関数を使えばいいのでしょうか教えてください。

Posted: 2006年5月19日(金) 21:03
by konisi
フォルダ名+"*"を検索対象として、FindFirstFileやFindNextFile等で検索を掛けてみてはどうでしょう?

調べるフォルダが"C:\"なら

コード: 全て選択

#console
Dim File as WIN32_FIND_DATA
Dim SearchHandle As HANDLE
Dim SearchFile As String
Dim Stetas As Long
Dim I As Long
Dim HitName As String

SearchFile="C:\"
SearchFile=SearchFile+"*"
SearchHandle=FindFirstFile(SearchFile,File)
Do

	If File.dwFileAttributes<>FILE_ATTRIBUTE_DIRECTORY then
		HitName=File.cFileName
		Print HitName
	End If
	Stetas=FindNextFile(SearchHandle,File)
	If Stetas=FALSE then Exit Do
Loop
FindClose(SearchHandle)
Sleep(INFINITE)
としますね。この場合。

Re: 指定したフォルダ

Posted: 2006年5月19日(金) 21:11
by 淡幻星
> 指定したフォルダの中に入っているファイル名を取得するにはどのような関数を使えばいいのでしょうか教えてください。
N88BASICモードでサンプルを書きます。
流れは分かりますでしょうか?
なお、エラー処理などは一部抜け落ちてます。
ファイル名のみの抽出には_splitpath()などを使う方法もあります。

コード: 全て選択

#N88BASIC
Dim strPath As String
Dim lpFindFildData As WIN32_FIND_DATA
Dim hFind As HANDLE
Dim pMark As BytePtr
Dim strBuf As String


strPath = "フォルダのパス。" '例:「C:\ActiveBasic\Test」

'以下、フォルダ内のファイル名(フォルダは除く)をフルパスで取得。
strPath = strPath + "\*" '[*]は「あらゆるもの」の意味。ワイルドカード。
hFind = FindFirstFile( StrPtr(strPath), lpFindFildData ) '検索を開始。
If( INVALID_HANDLE_VALUE=hFind )Then
    End '取得に失敗。
EndIf

Do
    'ディレクトリでないときの処理。
    If( lpFindFildData.dwFileAttributes<>FILE_ATTRIBUTE_DIRECTORY )Then

        strBuf = lpFindFildData.cFileName '検索されたファイルのフルパスをstrBufに代入
        Print strBuf '検索成功を確認。

        'ファイル名のみを抽出
        pMark = lstrrchr( lpFindFildData.cFileName, 92 ) '92=[\]
        strBuf = pMark
        Print strBuf '検索成功を確認。
    EndIf

Loop While( TRUE=FindNextFile( hFind, lpFindFildData ) )'次を検索。失敗したらループを抜ける。

FindClose( hFind ) '検索の終了処理(ハンドルをクローズ)。

Sleep( 5000 )
End
もし、子フォルダの中のファイル名も取得する場合は、
上記のファイル取得の部分を関数化して、再帰処理すれば良いと思います。

なお、もし「lstrrchr」でエラーと言われたら をトップ(#N88BASICの後にでも)に付け足してみて下さい。(試してないんです^^;)

(・・・lstrrchrで[\]を探す、なんてしなくても直にファイル名を返すAPIがshlwapi.dllの中にあったかも。)



追記:
また前後したか(^^;)

Posted: 2006年5月20日(土) 16:19
by C1000
うまくファイル名を取得できました。
淡幻星さんkonisiさんありがとうございました。