指定したフォルダ
指定したフォルダ
指定したフォルダの中に入っているファイル名を取得するにはどのような関数を使えばいいのでしょうか教えてください。
フォルダ名+"*"を検索対象として、FindFirstFileやFindNextFile等で検索を掛けてみてはどうでしょう?
調べるフォルダが"C:\"なら
としますね。この場合。
調べるフォルダが"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)
最後に編集したユーザー konisi [ 2006年5月19日(金) 21:13 ], 累計 1 回
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Re: 指定したフォルダ
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の後にでも)に付け足してみて下さい。(試してないんです^^;)コード: 全て選択
Declare Function _lstrrchr Lib "shlwapi" Alias "StrRChrIA" _
( pBufStart As BytePtr, _
pBufEnd As BytePtr, _
bSearch2 As Byte ) As BytePtr
Function lstrrchr( pBuffer1 As BytePtr, bSearch2 As Byte ) As BytePtr
lstrrchr = _lstrrchr( pBuffer1, _
pBuffer1 + lstrlen(pBuffer1), _
bSearch2 )
EndFunction
(・・・lstrrchrで[\]を探す、なんてしなくても直にファイル名を返すAPIがshlwapi.dllの中にあったかも。)
追記:
また前後したか(^^;)