指定したフォルダ

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

指定したフォルダ

#1 投稿記事 by C1000 »

指定したフォルダの中に入っているファイル名を取得するにはどのような関数を使えばいいのでしょうか教えてください。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 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)
としますね。この場合。
最後に編集したユーザー konisi [ 2006年5月19日(金) 21:13 ], 累計 1 回
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

Re: 指定したフォルダ

#3 投稿記事 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の中にあったかも。)



追記:
また前後したか(^^;)
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#4 投稿記事 by C1000 »

うまくファイル名を取得できました。
淡幻星さんkonisiさんありがとうございました。
返信する