FTPサーバーのディレクトリ・ファイルを列挙 <TOP>
FTPサーバーにあるディレクトリ、ファイルを列挙します。
InternetOpen インターネットのハンドルを作成
InternetConnect インターネットサーバーに接続し、ハンドルを返す
InternetCloseHandle インターネット関数のハンドルをクローズ
FtpFindFirstFile 指定したファイル名に一致するファイルやディレクトリを検索
InternetFindNextFile 検出したファイルの次を検出
例では、geocitiesのFTPサーバーにあるディレクトリおよびファイルを列挙しています。当然ユーザー名とパスワードは本物を入力します。
ファイルの種類は、すべてのファイルおよびwavファイルの列挙例です。
'================================================================ '= FTPサーバーのディレクトリ・ファイルを列挙
'= (FtpFindFirstFile.bas) '================================================================ #include "Windows.bi" ' インターネットのハンドルの作成 Declare Function Api_InternetOpen& Lib "wininet" Alias "InternetOpenA" (ByVal sAgent$, ByVal lAccessType&, ByVal sProxyName$, ByVal sProxyBypass$, ByVal lFlags&) ' インターネット上のサーバに接続し、ハンドルを返す Declare Function Api_InternetConnect& Lib "wininet" Alias "InternetConnectA" (ByVal hSession&, ByVal sServerName$, ByVal nServerPort&, ByVal sUsername$, ByVal sPassword$, ByVal lService&, ByVal lFlags&, ByVal lContext&) ' Win32インターネット関数のハンドルのクローズ Declare Function Api_InternetCloseHandle% Lib "wininet" Alias "InternetCloseHandle" (ByVal hInet&) ' 指定したファイル名に一致するファイルやディレクトリを検索 Declare Function Api_FtpFindFirstFile& Lib "wininet" Alias "FtpFindFirstFileA" (ByVal hConnect&, ByVal lpszSearchFile$, lpFindFileData As Any, ByVal dwFlags&, ByVal dwContext&) ' 検出したファイルの次を検出 Declare Function Api_InternetFindNextFile& Lib "wininet" Alias "InternetFindNextFileA" (ByVal hConnect&, lpFindFileData As Any) Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type #define MAX_PATH 260 Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * MAX_PATH cAlternateFileName As String * 16 End Type #define INTERNET_OPEN_TYPE_DIRECT 1 '直接接続 #define INTERNET_INVALID_PORT_NUMBER 0 ' #define INTERNET_SERVICE_FTP 1 'FTPを指定 #define INTERNET_FLAG_RELOAD -2147483648 'ローカルのキャッシュを無視し、常にサーバからデータを取得 Var Shared Edit(3) As Object Var Shared Text(3) As Object Var Shared List1 As Object Var Shared Button1 As Object For i = 0 To 3 Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) Edit(i).SetFontSize 14 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var wfd As WIN32_FIND_DATA Var hInet As Long Var hConnect As Long Var hFile As Long Var Ret As Long Button1.EnableWindow 0 List1.Resetcontent '初期化 hInet = Api_InternetOpen("", INTERNET_OPEN_TYPE_DIRECT, ByVal 0, ByVal 0, 0) SetMousePointer 2 If hInet <> 0 Then 'FTP接続処理 hConnect = Api_InternetConnect(hInet, Edit(0).GetWindowText, INTERNET_INVALID_PORT_NUMBER, Edit(1).GetWindowText, Edit(2).GetWindowText, INTERNET_SERVICE_FTP, 0, 0) If hConnect <> 0 Then 'FTPサーバーからファイルを検索 hFile = Api_FtpFindFirstFile(hConnect, Edit(3).GetWindowText, wfd, INTERNET_FLAG_RELOAD, 0) Do '検索結果をリストボックスへ追加 List1.AddString Left$(wfd.cFileName, InStr(wfd.cFileName, Chr$(0)) - 1) 'ファイルの検索を継続 Ret = Api_InternetFindNextFile(hFile, wfd) Loop Until Ret = 0 End If End If SetMousePointer 0 'ハンドルを閉じる If hInet <> 0 Then Ret = Api_InternetCloseHandle(hInet) End If If hConnect <> 0 Then Ret = Api_InternetCloseHandle(hConnect) End If If hConnect <> 0 Then Ret = Api_InternetCloseHandle(hFile) End If Button1.EnableWindow -1 End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End