vb.net – 使用FTP下载每个文件* WHILE *获取文件列表
发布时间:2020-12-17 00:01:56 所属栏目:大数据 来源:网络整理
导读:我们需要使用vb.net从远程FTP服务器获取大约100个非常小的文件. 我们公司不会让我们购买(或安装)任何第三方ftp库…因此我们被迫使用类似FtpWebRequest的东西. (或者是否有更好的免费,选择已经是Visual Studio的一部分?) 这种方法有效,但速度非常慢. (我假设
我们需要使用vb.net从远程FTP服务器获取大约100个非常小的文件.
我们公司不会让我们购买(或安装)任何第三方ftp库…因此我们被迫使用类似FtpWebRequest的东西. (或者是否有更好的免费,选择已经是Visual Studio的一部分?) 这种方法有效,但速度非常慢. (我假设因为不断登录/退出.) Log in with user name and password. Get a file-list from the remote server. Log out Use that file-list to get each file separtely: Log in,get the file,log out. Log in 99 more times,get each file,log out each time. 相反,我们可能应该这样做,但它永远不会起作用: Log in with user name and password. ONCE. Get a list of filenames. Download each file. Log out ONCE. 我们在网上找到了“获取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 Try sr = New IO.StreamReader(fwr.GetResponse().GetResponseStream()) Do Until (sr.EndOfStream()) fileName = sr.ReadLine() fwr.Method = WebRequestMethods.Ftp.DownloadFile output = "" Dim sr2 As IO.StreamReader = Nothing Try sr2 = New IO.StreamReader(fwr.GetResponse().GetResponseStream()) output = sr2.ReadToEnd() Catch ex As Exception End Try If (Not sr2 Is Nothing) Then sr2.Close() : sr2 = Nothing Call MsgBox("Got " & fileName & LF & output) Loop Catch ex As Exception End Try If (Not sr Is Nothing) Then sr.Close() : sr = Nothing If (Not fwr Is Nothing) Then fwr = Nothing
看看我的FTP课程,它可能正是你需要的.
Public Class FTP '-------------------------[BroCode]-------------------------- '----------------------------FTP----------------------------- Private _credentials As System.Net.NetworkCredential Sub New(ByVal _FTPUser As String,ByVal _FTPPass As String) setCredentials(_FTPUser,_FTPPass) End Sub Public Sub UploadFile(ByVal _FileName As String,ByVal _UploadPath As String) Dim _FileInfo As New System.IO.FileInfo(_FileName) Dim _FtpWebRequest As System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(New Uri(_UploadPath)),System.Net.FtpWebRequest) _FtpWebRequest.Credentials = _credentials _FtpWebRequest.KeepAlive = False _FtpWebRequest.Timeout = 20000 _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile _FtpWebRequest.UseBinary = True _FtpWebRequest.ContentLength = _FileInfo.Length Dim buffLength As Integer = 2048 Dim buff(buffLength - 1) As Byte Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead() Try Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream() Dim contentLen As Integer = _FileStream.Read(buff,buffLength) Do While contentLen <> 0 _Stream.Write(buff,contentLen) contentLen = _FileStream.Read(buff,buffLength) Loop _Stream.Close() _Stream.Dispose() _FileStream.Close() _FileStream.Dispose() Catch ex As Exception MessageBox.Show(ex.Message,"Upload Error: ",MessageBoxButtons.OK,MessageBoxIcon.Error) End Try End Sub Public Sub DownloadFile(ByVal _FileName As String,ByVal _ftpDownloadPath As String) Try Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpDownloadPath) _request.KeepAlive = False _request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile _request.Credentials = _credentials Dim _response As System.Net.FtpWebResponse = _request.GetResponse() Dim responseStream As System.IO.Stream = _response.GetResponseStream() Dim fs As New System.IO.FileStream(_FileName,System.IO.FileMode.Create) responseStream.CopyTo(fs) responseStream.Close() _response.Close() Catch ex As Exception MessageBox.Show(ex.Message,"Download Error: ",MessageBoxIcon.Error) End Try End Sub Public Function GetDirectory(ByVal _ftpPath As String) As List(Of String) Dim ret As New List(Of String) Try Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpPath) _request.KeepAlive = False _request.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails _request.Credentials = _credentials Dim _response As System.Net.FtpWebResponse = _request.GetResponse() Dim responseStream As System.IO.Stream = _response.GetResponseStream() Dim _reader As System.IO.StreamReader = New System.IO.StreamReader(responseStream) Dim FileData As String = _reader.ReadToEnd Dim Lines() As String = FileData.Split(New String() {Environment.NewLine},StringSplitOptions.RemoveEmptyEntries) For Each l As String In Lines ret.Add(l) Next _reader.Close() _response.Close() Catch ex As Exception MessageBox.Show(ex.Message,"Directory Fetch Error: ",MessageBoxIcon.Error) End Try Return ret End Function Private Sub setCredentials(ByVal _FTPUser As String,ByVal _FTPPass As String) _credentials = New System.Net.NetworkCredential(_FTPUser,_FTPPass) End Sub End Class 要初始化: Dim ftp As New FORM.FTP("username","password") ftp.UploadFile("c:file.jpeg","ftp://domain/file.jpeg") ftp.DownloadFile("c:file.jpeg","ftp://ftp://domain/file.jpeg") Dim directory As List(Of String) = ftp.GetDirectory("ftp://ftp.domain.net/") ListBox1.Items.Clear() For Each item As String In directory ListBox1.Items.Add(item) Next (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |