vb.net を使用して、リモート FTP サーバーから約 100 個の非常に小さなファイルを取得する必要があります。私たちの会社は、サードパーティのftpライブラリを購入(またはインストール)することを許可しません...そのため、FtpWebRequestのようなものを使用することを余儀なくされています. (または、既に Visual Studio に含まれている、より優れた無料の選択肢はありますか?)
この方法は機能しますが、非常に遅いです。(ログイン/ログアウトが頻繁に行われるためだと思います。)
ユーザー名とパスワードでログインします。 リモート サーバーからファイル リストを取得します。 ログアウト そのファイルリストを使用して、各ファイルを個別に取得します。 ログインしてファイルを取得し、ログアウトします。 さらに 99 回ログインし、各ファイルを取得し、毎回ログアウトします。
代わりに、おそらくこれを行う必要がありますが、うまくいきません。
ユーザー名とパスワードでログインします。一度。 ファイル名のリストを取得します。 各ファイルをダウンロードします。 一度ログアウトします。
「FTPファイルリストを取得する」および後で「FTPで1つのファイルをダウンロードする方法」の無数の例をオンラインで見つけました...しかし、「各ファイル名を取得して今すぐダウンロードする」ことはありません.
Dim fwr As Net.FtpWebRequest = Net.FtpWebRequest.Create(ftpSite) fwr.Credentials = New NetworkCredential(userName, password) fwr.KeepAlive = True fwr.Method = WebRequestMethods.Ftp.ListDirectory Dim sr As IO.StreamReader = Nothing 試す sr = 新しい IO.StreamReader(fwr.GetResponse().GetResponseStream()) Do until (sr.EndOfStream()) ファイル名 = sr.ReadLine() fwr.Method = WebRequestMethods.Ftp.DownloadFile 出力 = "" Dim sr2 As IO.StreamReader = Nothing 試す sr2 = 新しい IO.StreamReader(fwr.GetResponse().GetResponseStream()) 出力 = sr2.ReadToEnd() ex を例外としてキャッチ エンドトライ If (Not sr2 Is Nothing) Then sr2.Close() : sr2 = Nothing Call MsgBox("Got " & ファイル名 & LF & 出力) ループ ex を例外としてキャッチ エンドトライ If (Not sr Is Nothing) Then sr.Close() : sr = Nothing If (Not fwr Is Nothing) Then fwr = Nothing