Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net visualbasic:FTP下载_Vb.net_Ftp - Fatal编程技术网

Vb.net visualbasic:FTP下载

Vb.net visualbasic:FTP下载,vb.net,ftp,Vb.net,Ftp,我尝试了不同的代码,其中没有一个可以从示例DriveHQ下载文件 但是我确实设法上传了,所以主机看起来很好 编辑* sub() GetFile(“downloadme.txt”,“桌面”) 端接头 作为布尔值的公共函数GetFile(ByVal Name作为字符串,ByVal DestFile作为字符串) 作为FtpWebRequest=CType(FtpWebRequest.Create(“ftp://ftp.drivehq.com/“&”“名称”,FtpWebRequest) oFTP.Cr

我尝试了不同的代码,其中没有一个可以从示例DriveHQ下载文件

但是我确实设法上传了,所以主机看起来很好

编辑*

sub()
GetFile(“downloadme.txt”,“桌面”)
端接头
作为布尔值的公共函数GetFile(ByVal Name作为字符串,ByVal DestFile作为字符串)
作为FtpWebRequest=CType(FtpWebRequest.Create(“ftp://ftp.drivehq.com/“&”“名称”,FtpWebRequest)
oFTP.Credentials=新网络凭据(“用户”、“密码”)
oFTP.Method=WebRequestMethods.Ftp.DownloadFile
oFTP.KeepAlive=KeepAlive
'oFTP.EnableSsl=UseSSL
'如果使用SSL,则ServicePointManager.ServerCertificateValidationCallback=新的RemoteCertificateValidationCallback(ValidateServerCertificate的地址)
oFTP.UseBinary=True
作为FtpWebResponse=CType的Dim响应(oFTP.GetResponse,FtpWebResponse)
Dim responseStream As Stream=response.GetResponseStream
将fs设置为新文件流(DestFile,FileMode.Create)
Dim缓冲区(2047)作为字节
Dim读取为整数=1
当读取0时
read=responseStream.read(buffer,0,buffer.Length)
fs.写入(缓冲区、0、读取)
结束时
responseStream.Close()
财政司司长
财政司司长(关闭)
responseStream.Close()
答复:Close()
oFTP=无
返回真值
端函数
公共函数将ServerCertificate(ByVal发送方作为对象,ByVal证书作为X509Certificate,ByVal链作为X509Chain,ByVal sslPolicyErrors作为sslPolicyErrors)验证为布尔值
如果sslPolicyErrors=sslPolicyErrors.RemoteCertificateChaineErrors,则
返回错误
ElseIf sslPolicyErrors=sslPolicyErrors.RemoteCertificateNameMatch然后
Dim z As System.Security.Policy.Zone=System.Security.Policy.Zone.CreateFromUrl(CType(发送方,HttpWebRequest.RequestUri.ToString)
如果z.SecurityZone=System.Security.SecurityZone.Intranet或z.SecurityZone=System.Security.SecurityZone.MyComputer,则
返回真值
如果结束
返回错误
如果结束
返回真值
端函数

//Simon

您是否收到错误消息,或者它只是没有达到您期望的效果?您正在创建一个文件流并将其指向一个名为
DESKTOP
的文件,这是您真正想要做的还是仅仅是一个示例?

您可以发布一些您尝试过的代码,以便我们可以引导您朝着正确的方向前进吗?@carmstrong告诉我,如果您做对了,我会得到一个运行时错误。错误530:您没有登录,但我是:(您的代码有效,我刚刚用有效的用户名和密码对我的FTP服务器进行了测试。
(530)未登录
表示用户名/密码无效。@Chris Haas我确信我有一个有效的用户名和密码,因为我可以登录website@user564612,不是为了强调这一点,但您是否已从FTP客户端确认用户名和密码有效(FileZilla、CuteFtp等?如果您没有主目录的读取权限,您还可能获得530。
sub()
  GetFile("downloadme.txt", "DESKTOP")
    End Sub

    Public Function GetFile(ByVal Name As String, ByVal DestFile As String) As Boolean
        Dim oFTP As FtpWebRequest = CType(FtpWebRequest.Create("ftp://ftp.drivehq.com/" & "" & Name), FtpWebRequest)
        oFTP.Credentials = New NetworkCredential("user", "passw")
        oFTP.Method = WebRequestMethods.Ftp.DownloadFile
        oFTP.KeepAlive = KeepAlive
        ' oFTP.EnableSsl = UseSSL
        ' If UseSSL Then ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
        oFTP.UseBinary = True
        Dim response As FtpWebResponse = CType(oFTP.GetResponse, FtpWebResponse)
        Dim responseStream As Stream = response.GetResponseStream
        Dim fs As New FileStream(DestFile, FileMode.Create)
        Dim buffer(2047) As Byte
        Dim read As Integer = 1
        While read <> 0
            read = responseStream.Read(buffer, 0, buffer.Length)
            fs.Write(buffer, 0, read)
        End While
        responseStream.Close()
        fs.Flush()
        fs.Close()
        responseStream.Close()
        response.Close()
        oFTP = Nothing
        Return True
    End Function

    Public Function ValidateServerCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
        If sslPolicyErrors = sslPolicyErrors.RemoteCertificateChainErrors Then
            Return False
        ElseIf sslPolicyErrors = sslPolicyErrors.RemoteCertificateNameMismatch Then
            Dim z As System.Security.Policy.Zone = System.Security.Policy.Zone.CreateFromUrl(CType(sender, HttpWebRequest).RequestUri.ToString)
            If z.SecurityZone = System.Security.SecurityZone.Intranet Or z.SecurityZone = System.Security.SecurityZone.MyComputer Then
                Return True
            End If
            Return False
        End If
        Return True
    End Function