ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2018年8月15日(水) 13:46

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年6月26日(日) 17:55 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
住所: 北海道
BackSearchABの1491「何方かお願いします。」を基にし,
ディレクトリを指定し,そこにあるファイルとディレクトリのリストを作成する関数を作成しました。
なお結果はStrListクラス(http://ab.sinryow.net/strlist.php)に格納されるので,別途こちらをダウンロードしてお使い下さい。

Function DirList(szPath As String, ByRef sl As StrList)(dwOption As DWord) As Long
  szPath どのパスを検索するかを指定します。
  sl 結果を格納するStrListクラスを指定します。
  dwOption 検索オプションです。
    DIRLIST_RECURSIVE ディレクトリを再帰的に検索します(結果はすべて最初に指定したディレクトリを基準にします)。DIRLIST_NO_DIRSと同時には指定できません(DIRLIST_NO_DIRSが優先されます)。
    DIRLIST_NO_DIRS 検索結果にディレクトリを含めません。
    DIRLIST_NO_FILES 検索結果にファイルを含めません。
ディレクトリ名は,その後ろに「\」をつけた状態で格納されます。
コード:
#include "StrList.sbp"

Const DIRLIST_RECURSIVE		=1
Const DIRLIST_NO_DIRS		=2
Const DIRLIST_NO_FILES		=4

Function DirList(szPath As String, ByRef sl As StrList)(dwOption As DWord) As Long
	DirList=_DirList(szPath, "", sl, dwOption)
End Function

Function _DirList(szPath As String, szAddPath As String,
				  ByRef sl As StrList, dwOption As DWord) As Long
	Dim hFind As HANDLE
	Dim wfd As WIN32_FIND_DATA
	Dim temp As String

	' 末尾が「\」で終わっていないパスの場合は付加する
	If szPath[Len(szPath)-1]<>92 Then
		szPath=szPath+"\"
	End If
	
	' 1つ目の要素を得る(同時にハンドル作成)
	hFind=FindFirstFile(szPath+"*.*", wfd)
	If hFind=INVALID_HANDLE_VALUE Then
		_DirList=FALSE
		Exit Function
	End If
	
	' 次々検索する
	Do
		If (wfd.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) _
		= FILE_ATTRIBUTE_DIRECTORY Then
			' ディレクトリが発見された場合
			If (dwOption And DIRLIST_NO_DIRS)=0 And _
			wfd.cFileName<>"." And wfd.cFileName<>".." Then
				temp=MakeStr(wfd.cFileName)+"\"
				sl.AddBtm(szAddPath+temp)
				If (dwOption And DIRLIST_RECURSIVE)<>0 Then
					_DirList(szPath+temp, szAddPath+temp, sl, dwOption)
				End If
			End If
		Else
			' ファイルが発見された場合
			If (dwOption And DIRLIST_NO_FILES)=0 Then
				sl.AddBtm(szAddPath+MakeStr(wfd.cFileName))
			End If
		End If
	Loop While (FindNextFile(hFind, wfd) = TRUE)

	' 検索ハンドルを解放する
	FindClose(hFind)
	_DirList=TRUE
End Function

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
投稿記事Posted: 2005年7月06日(水) 01:11 
オフライン

登録日時: 2005年7月03日(日) 10:37
記事: 27
住所: 愛知県岡崎市
> If (wfd.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
コード:
Select Case wfd.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY
    Case 0:    '<< ディレクトリでない場合
    Case Else: '<< ディレクトリの場合
End Select
このようにすればかなり速度アップできますよ♪
参考まで。
[/code]

_________________
# まけイヌ (losedog2)
# Home : http://www50.tok2.com/home/losedog2/
# Mail : losedog2@yahoo.co.jp


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke