将子程序从VB6转换为VB2005。它通过FTP从内部公司服务器下载单个文本文件。我已经在VB6中使用这个代码多年了,并且不必提供代理凭证来通过企业防火墙,只需要进入FTP服务器的凭据。
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hconnection = InternetConnect(hOpen, HostURL, INTERNET_INVALID_PORT_NUMBER, user, PW, INTERNET_SERVICE_FTP, nFlag, 0)
DownloadFile = FtpGetFile(hconnection, File$, TargetPathFile$, False, INTERNET_FLAG_RELOAD, FTP_TRANSFER_TYPE_ASCII, 0)
在VB2005中我使用
Dim reqFTP As FtpWebRequest = Nothing
Dim ftpStream As Stream = Nothing
Dim outPathAndFile As String = My.Computer.FileSystem.CombinePath(TargetPath, HostFileName)
Dim outputStream As New FileStream(outPathAndFile, FileMode.Create)
reqFTP = DirectCast(FtpWebRequest.Create(New Uri("ftp://" + HostURL + "/" + HostFileName)), FtpWebRequest)
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
reqFTP.UseBinary = False 'True if binary file, False if ASCII text file
reqFTP.Credentials = New NetworkCredential(id, pw)
Dim response As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
ftpStream = response.GetResponseStream()
Dim cl As Long = response.ContentLength
Dim bufferSize As Integer = 2048
Dim readCount As Integer
Dim buffer As Byte() = New Byte(bufferSize - 1) {}
readCount = ftpStream.Read(buffer, 0, bufferSize)
While readCount > 0
outputStream.Write(buffer, 0, readCount)
readCount = ftpStream.Read(buffer, 0, bufferSize)
End While
在reqFTP.GetResponse上出现错误,“远程服务器返回错误。(407)需要代理身份验证”。我只是无法弄清楚为什么在我的旧代码中我从来没有提供代理服务器,而在新代码中它似乎需要它。我尝试通过WS_FTP手动连接,它不需要代理,所以我必须做错了什么,但无法弄清楚是什么。
答案 0 :(得分:0)
在过渡期间,我做了一些更多的研究,发现了两件事。一个如果我添加我不需要代理,如下reqFTP.Proxy =没有'没有代理退出公司防火墙,因为服务器是内部解决我的代理问题。一旦代理被解决,我有另一个从大型机下载的问题,最后我的路径和数据集名称必须是[code] ftpSite //'test.file2'[\ code]的形式。一旦我做了这两件事,它就像一个魅力。