【发布时间】:2014-08-13 17:23:27
【问题描述】:
首先对这个琐碎的问题表示抱歉,我是新手,仍在学习。我正在使用 vb.net 构建一个连接到 FTP 服务器的应用程序,列出文件并根据文件扩展名过滤这些文件。然后下载并删除文件。
我收到错误消息:“底层连接已关闭:服务器违反了协议”
这里是我调用方法的地方。
Call GetDirectoryListing(strExtension, strPastaDownload, strUser, strPsswd)
strFileNumber = Cont_Files
Dim blnDownloaded As Boolean = False
If Cont_Files > 0 Then
For cont = 0 To Cont_Files - 1
nameFile = arrArq(cont)
strFilename = UCase(nameFile)
strLocal = AppPath & strLocalArquivos & "\" & nameFile
blnDownloaded = mFTP.FtpDownloadFile(strPastaDownload, strNomedoArquivo, strLocal, strUsuario, strSenha)
StrDir = Dir(strdirectory)
strRemote = nameFile
If StrDir <> "" Then
FileCopy(AppPath & strfiledirectory & "\" & Trim(strRemote), strLocalBackup & "\" & Trim(strRemote))
mFTP.FtpDeleteFile(strServer, strPastaFtp, strFilename, strUsuario, strSenha)
End If
Next
这是列出文件的功能,我在这里没有收到任何错误,只是为了说明
Public Function GetDirectoryListing(ByVal sFilter As String, ByVal strServer As String, ByVal strLogin As String, ByVal strPassword As String) As ArrayList
Dim ftpRequest As FtpWebRequest = Nothing
Try
ftpRequest = FtpWebRequest.Create(New Uri(strServer))
With ftpRequest
.Credentials = New NetworkCredential(strLogin, strPassword)
.UsePassive = True
.Method = WebRequestMethods.Ftp.ListDirectory
.KeepAlive = True
End With
'ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory 'List, not Download
'Read the contents of the directory and store it into a string array
Dim srReader As New StreamReader(ftpRequest.GetResponse().GetResponseStream())
sDirectoryList = srReader.ReadToEnd().Split(vbNewLine)
For i As Integer = 0 To UBound(sDirectoryList) - 1
If sFilter = Mid(sDirectoryList(i), Len(sDirectoryList(i)) - 2, 3) Then
listaArquivo.Add(sDirectoryList(i))
End If
Next
'Clear the last split vbNewLine
If sDirectoryList IsNot Nothing Then
sDirectoryList(sDirectoryList.Length - 1) = ""
End If
srReader.Close()
srReader = Nothing
GetDirectoryListing = listaArquivo
ftpRequest = Nothing
Catch ex As WebException
MessageBox.Show("Failed to get directory listing. GetDirectoryListing()")
'MessageBox.Show(ex.ToString())
End Try
End Function
这里是下载功能
Public Function FtpDownloadFile(ByVal strUrl As String, ByVal strFileName As String, ByVal strTargetDirectory As String, ByVal strLogin As String, ByVal strPassword As String) As Boolean
Dim ftpRequest As FtpWebRequest = Nothing
Dim ftpResponse As FtpWebResponse = Nothing
Dim strFtpFile As String = ""
Dim strTargetFile As String = ""
Dim strmReader As StreamReader = Nothing
Dim strmResponse As Stream = Nothing
Dim strmTarget As Stream = Nothing
Dim strmWriter As StreamWriter = Nothing
strFtpFile = strUrl & "/" & Trim(strFileName)
strTargetFile = strTargetDirectory
Try
ftpRequest = CType(WebRequest.Create(strFtpFile), FtpWebRequest)
With ftpRequest
.Credentials = New NetworkCredential(strLogin, strPassword)
.UsePassive = True
.Method = WebRequestMethods.Ftp.DownloadFile
.KeepAlive = True
End With
ftpResponse = CType(ftpRequest.GetResponse(), FtpWebResponse) 'line where I am getting the error
strmTarget = New FileStream(strTargetFile, FileMode.Create)
strmWriter = New StreamWriter(strmTarget)
strmResponse = ftpResponse.GetResponseStream()
strmReader = New StreamReader(strmResponse, System.Text.Encoding.UTF8)
strmWriter.Write(strmReader.ReadToEnd())
Catch ex As Exception
Throw ex
Finally
If strmReader IsNot Nothing Then
strmReader.Close()
strmReader.Dispose()
End If
If strmWriter IsNot Nothing Then
strmWriter.Close()
strmWriter.Dispose()
End If
If ftpResponse IsNot Nothing Then
ftpResponse.Close()
ftpResponse = Nothing
End If
If ftpRequest IsNot Nothing Then ftpRequest = Nothing
End Try
Return True
End Function
提前感谢您的帮助
【问题讨论】:
标签: vb.net ftpwebrequest